// Unitl this is resolved https://github.com/rust-lang/cargo/issues/4663 we need this workaround #[cfg(all(feature = "json", not(feature = "bson")))] fn main() { use std::fs; use sol_chainsaw::{ ChainsawDeserializer, IdlProvider, JsonSerializationOpts, }; fn read_idl_json(program_id: &str) -> String { fs::read_to_string(format!("fixtures/idls/{}/idl.json", program_id)) .expect("failed to read IDL") } fn read_account( program_id: &str, account_type: &str, account_address: &str, ) -> Vec { serde_json::from_str::>( &fs::read_to_string(format!( "fixtures/idls/{}/accounts/{}/{}.json", program_id, account_type, account_address )) .expect("failed to read account"), ) .expect("failed to read account data") } let opts = JsonSerializationOpts { pubkey_as_base58: true, n64_as_string: false, n128_as_string: true, }; let mut chainsaw = ChainsawDeserializer::new(&opts); // 1. Add IDLS // Candy Machine IDL let cndy_program_id = "cndy3Z4yapfJBmL3ShUp5exZKqR3z33thTzeNMm2gRZ"; { let idl_json = read_idl_json(&cndy_program_id); chainsaw .add_idl_json( cndy_program_id.to_string(), &idl_json, IdlProvider::Anchor, ) .expect("failed adding IDL JSON"); } // Staking Program IDL let stake_program_id = "StakeSSzfxn391k3LvdKbZP5WVwWd6AsY1DNiXHjQfK"; { let idl_json = read_idl_json(&stake_program_id); chainsaw .add_idl_json( stake_program_id.to_string(), &idl_json, IdlProvider::Anchor, ) .expect("failed adding IDL JSON"); } // 2. Read Accounts Data // Stake Account let stake_acc_data = read_account( &stake_program_id, "EscrowHistory", "5AEHnKRonYWeXWQTCqbfaEY6jHy38ifutWsriVsxsgbL", ); // Candy Machine Account let cndy_acc_data = read_account( &cndy_program_id, "CollectionPDA", "4gt6YPtgZp2MYJUP7cAH8E3UiL6mUruYaPprEiyJytQ4", ); // 3. Deserialize Accounts // Stake Account { let mut acc_json = String::new(); chainsaw .deserialize_account_to_json( &stake_program_id, &mut stake_acc_data.as_slice(), &mut acc_json, ) .expect("failed to deserialize account"); assert!(acc_json.contains( "{\"escrow\":\"4uj6fRJzqoNRPktmYqGX1nBkjAJBsimJ4ug77S3Tzj7y\"" )); } // Candy Machine Account { let mut acc_json = String::new(); chainsaw .deserialize_account_to_json( &cndy_program_id, &mut cndy_acc_data.as_slice(), &mut acc_json, ) .expect("failed to deserialize account"); assert_eq!(acc_json, "{\"mint\":\"BrqNo3sQFTaq9JevoWYhgagJEjE3MmTgYonfaHV5Mf3E\",\"candyMachine\":\"DpBwktkJsEPTtsRpD8kCFGwEUjwTkXARSGSTQ7MJr4kE\"}"); } } #[cfg(feature = "bson")] fn main() { eprintln!("This example requires ONLY the `json` feature to be enabled"); } #[cfg(not(feature = "json"))] fn main() { eprintln!("This example requires the `json` feature to be enabled"); }