]> git.proxmox.com Git - perlmod.git/blobdiff - perlmod-test/src/pkg142.rs
experimental direct substr support
[perlmod.git] / perlmod-test / src / pkg142.rs
index c5c7df67933710f8687208415acc1b176ad3c7dd..252b472ece3d3fdc925c4af3426586cce0e6cb90 100644 (file)
@@ -12,12 +12,23 @@ pub struct RawRefs {
     reference: Value,
 }
 
+#[derive(Debug, Deserialize, Serialize)]
+#[serde(rename_all = "kebab-case")]
+enum AnEnum {
+    Something,
+    Another,
+    ResultA,
+    ResultB,
+}
+
 #[perlmod::package(name = "RSPM::Foo142", lib = "perlmod_test")]
 mod export {
     use anyhow::{bail, Error};
 
     use perlmod::Value;
 
+    use super::AnEnum;
+
     #[export]
     fn foo142(a: u32, b: u32) -> Result<u32, Error> {
         if a == 42 {
@@ -50,6 +61,30 @@ mod export {
         println!("test_refs: copied text: {:?}", data.copied);
         Ok(data.reference)
     }
+
+    #[export]
+    fn test_enums(data: AnEnum) -> Result<AnEnum, Error> {
+        Ok(match data {
+            AnEnum::Something => AnEnum::ResultA,
+            AnEnum::Another => AnEnum::ResultB,
+            _ => bail!("invalid"),
+        })
+    }
+
+    #[export]
+    fn test_trailing_optional(first: u32, second: Option<u32>) {
+        println!("{:?}, {:?}", first, second);
+    }
+
+    #[export(xs_name = "testit_xsub")]
+    fn testit(#[cv] cv: Value, arg: &str) {
+        let _ = (cv, arg);
+    }
+
+    #[export(raw_return)]
+    fn test_substr_return(#[raw] value: Value) -> Result<Value, Error> {
+        Ok(value.substr(3..6)?)
+    }
 }
 
 #[perlmod::package(name = "RSPM::EnvVarLibrary", lib = "x-${CARGO_PKG_NAME}-y")]