]> git.proxmox.com Git - perlmod.git/blobdiff - perlmod-test/src/pkg142.rs
experimental direct substr support
[perlmod.git] / perlmod-test / src / pkg142.rs
index 9d0e48bbcd96ee97e6fdd188e8d579f61d50005f..252b472ece3d3fdc925c4af3426586cce0e6cb90 100644 (file)
@@ -1,12 +1,34 @@
 use serde::{Deserialize, Serialize};
 
+use perlmod::Value;
+
 #[derive(Debug, Deserialize, Serialize)]
 pub struct Blubber(String);
 
+#[derive(Debug, Deserialize, Serialize)]
+pub struct RawRefs {
+    copied: String,
+
+    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 {
@@ -33,4 +55,45 @@ mod export {
         println!("got {:?}", value);
         Ok(value.0)
     }
+
+    #[export]
+    fn test_refs(data: super::RawRefs) -> Result<Value, Error> {
+        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")]
+mod expanded_export {
+    use anyhow::Error;
+
+    #[export]
+    fn test_lib_env_vars(value: &str) -> Result<(), Error> {
+        println!("foo: {:?}", value);
+        Ok(())
+    }
 }