#![allow(dead_code)] use edn_derive::{Deserialize, Serialize}; use edn_rs::EdnError; #[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] enum AccountType { Basic, Premium, PremiumPlus, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] struct Account { crux__db___id: String, account___amount: usize, account_type: AccountType, } fn main() -> Result<(), EdnError> { let account = Account { crux__db___id: "123".to_string(), account___amount: 42, account_type: AccountType::PremiumPlus, }; let account_edn_str = "{ :crux.db/id \"123\", :account/amount 42, :account-type :account-type/premium-plus, }"; assert_eq!(edn_rs::to_string(&account), account_edn_str); let account: Account = edn_rs::from_str(account_edn_str)?; assert_eq!( account, Account { crux__db___id: "123".to_string(), account___amount: 42, account_type: AccountType::PremiumPlus, } ); Ok(()) }