solana_farm_sdk/
string.rs1use {
5 arraystring::{typenum::U64, ArrayString},
6 serde::Serialize,
7 solana_program::{instruction::Instruction, program_error::ProgramError, pubkey::Pubkey},
8 std::collections::HashMap,
9};
10
11pub type ArrayString64 = ArrayString<U64>;
13
14pub fn to_pretty_json<T>(object: &T) -> Result<String, serde_json::Error>
15where
16 T: ?Sized + Serialize,
17{
18 serde_json::to_string_pretty(&object)
19}
20
21pub fn instruction_to_string(inst: &Instruction) -> String {
23 let len = 145 + inst.data.len() * 4 + inst.accounts.len() * 40;
24 let mut s = String::with_capacity(len);
25 s += format!("{{\"program_id\":\"{}\",\"accounts\":[", inst.program_id).as_str();
26 let mut first_object = true;
27 for val in &inst.accounts {
28 if !first_object {
29 s += ",";
30 } else {
31 first_object = false;
32 }
33 s += format!(
34 "{{\"pubkey\":\"{}\",\"is_signer\":{},\"is_writable\":{}}}",
35 val.pubkey, val.is_signer, val.is_writable
36 )
37 .as_str();
38 }
39 s += format!("],\"data\":{:?}}}", inst.data).as_str();
40 s
41}
42
43pub fn pubkey_map_to_string(map: &HashMap<String, Pubkey>) -> String {
45 if map.is_empty() {
46 return "{}".to_string();
47 }
48 let mut len = 1;
49 for key in map.keys() {
50 len += key.len() + 50;
51 }
52 let mut s = String::with_capacity(len);
53 s += "{";
54 for (key, val) in map {
55 if s.len() != 1 {
56 s += ",";
57 }
58 s += format!("\"{}\":\"{}\"", key, val).as_str();
59 }
60 s += "}";
61 s
62}
63
64pub fn str_to_as64(input: &str) -> Result<ArrayString64, ProgramError> {
65 ArrayString64::try_from_str(input).or(Err(ProgramError::InvalidArgument))
66}
67
68pub fn capitalize(s: &str) -> String {
69 let mut c = s.chars();
70 match c.next() {
71 None => String::new(),
72 Some(f) => f.to_uppercase().collect::<String>() + c.as_str(),
73 }
74}