#persist #async-trait #runtimes #type #generic #file #save-file

perseverance

Rust持久化类型特剧行为

4个版本

0.1.3 2021年8月9日
0.1.2 2021年8月2日
0.1.1 2021年7月28日
0.1.0 2021年7月28日

8 in #persist

MIT 许可证

13KB
262

perseverance

一个Rust库,简化了在运行时之间维护持久性的过程。

用法

要使用实现Persist的泛型类型,请使用功能 types

要在异步中使用perseverance,可以使用 async 功能,这将启用PersistAsync特剧行为,这也会启用从async_trait crate导出的#[async_trait]宏。

以下是一个示例实现,它为具有简单持久性的文本文件提供了一个示例,该文件可以直接保存或在设定的时间间隔内保存。

存储类型不会影响,因为任何必要的配置都将包含在Config类型中,这意味着可以相对容易地在将数据保存到文件和数据库之间进行切换。

示例


    fn using_struct() {
        let mut persistent_text = TextFile::new(PathBuf::from("test.json")); // Setup struct
        load(&mut persistent_text);

        persistent_text.data = "Hello World!".into(); // Change Data
        persist(&persistent_text); // Persist

        // Do other work...

        persistent_text.data = "Bye!".into();
        persist(&persistent_text);
    }

    fn using_generic_struct() {
        let path = PathBuf::from("generic.json");

        let mut persistent_text: JsonPreserve<String> = JsonPreserve::new("".into(), path);
        load(&mut persistent_text);

        // Do other work...

        *persistent_text = "Bye!".into();
        persist(&persistent_text);
    }

    fn load<T>(persist: &mut T)
    where
        T: Persist,
    {
        persist.load().unwrap();
    }

    fn persist<T>(persist: &T)
    where
        T: Persist,
    {
        persist.persist().unwrap();
    }

    #[derive(Debug)]
    pub struct TextFile {
        pub data: String,
        config: PathBuf,
    }

    impl TextFile {
        fn new(config: PathBuf) -> Self {
            TextFile {
                data: "".into(),
                config,
            }
        }
    }

    impl Persist for TextFile {
        type Error = std::io::Error;

        type Config = PathBuf;

        fn persist(&self) -> Result<(), Self::Error> {
            // Save to file
        }

        fn load(&mut self) -> Result<(), Self::Error> {
            // Load from file
        }
    }

依赖

~0–300KB