diff --git a/perlmod-test/src/pkg142.rs b/perlmod-test/src/pkg142.rs index 167e54f..8f2d665 100644 --- a/perlmod-test/src/pkg142.rs +++ b/perlmod-test/src/pkg142.rs @@ -21,6 +21,13 @@ enum AnEnum { ResultB, } +#[derive(Debug, Deserialize, Serialize)] +#[serde(rename_all = "kebab-case")] +enum TaggedEnum { + Something(String), + Another(i32, i32), +} + #[perlmod::package( name = "RSPM::Foo142", lib = "perlmod_test", @@ -33,6 +40,7 @@ mod export { use perlmod::Value; use super::AnEnum; + use super::TaggedEnum; fn loaded() { println!(""); @@ -80,6 +88,14 @@ mod export { }) } + #[export] + fn test_enums2(data: TaggedEnum) -> TaggedEnum { + match data { + TaggedEnum::Something(word) => TaggedEnum::Something(format!("{word}.")), + TaggedEnum::Another(n, m) => TaggedEnum::Another(n + 1, m * 2), + } + } + #[export] fn test_trailing_optional(first: u32, second: Option) { println!("{first:?}, {second:?}"); diff --git a/test.pl b/test.pl index 722bda8..1939d29 100644 --- a/test.pl +++ b/test.pl @@ -130,3 +130,7 @@ my $err = $@; die "test_deserialized_error error is not a hash\n" if ref($err) ne 'HASH'; die "structured error has invalid fields\n" if join(',', sort(keys(%$err))) ne 'a,b'; print('error type: { a: ', $err->{a}, ', b: ', $err->{b}, " }\n"); + +my $a = RSPM::Foo142::test_enums2({ something => "hello" }); +print(join(', ', keys %$a), "\n"); +print($a->{something}, "\n"); diff --git a/test.pl.expected b/test.pl.expected index 8dce245..37557c3 100644 --- a/test.pl.expected +++ b/test.pl.expected @@ -47,3 +47,5 @@ Testing optional parameters Substring test [OneTwoThree] [Two] error type: { a: first, b: second } +something +hello.