1use base64::{Engine, prelude::BASE64_STANDARD};
4use near_api_types::NearToken;
5use near_openapi_client::types::RpcError;
6
7pub fn to_base64(input: &[u8]) -> String {
8 BASE64_STANDARD.encode(input)
9}
10
11pub fn from_base64(encoded: &str) -> Result<Vec<u8>, base64::DecodeError> {
12 BASE64_STANDARD.decode(encoded)
13}
14
15pub const fn near_data_to_near_token(data: near_api_types::Data<u128>) -> NearToken {
17 NearToken::from_yoctonear(data.data)
18}
19
20pub fn is_critical_blocks_error(err: &RpcError) -> bool {
27 is_critical_json_rpc_error(err, |_| false)
28}
29
30pub fn is_critical_validator_error(err: &RpcError) -> bool {
31 is_critical_json_rpc_error(err, |_| false)
32}
33
34pub fn is_critical_query_error(rpc_error: &RpcError) -> bool {
35 is_critical_json_rpc_error(rpc_error, |_| false)
36}
37
38pub fn is_critical_transaction_error(err: &RpcError) -> bool {
39 is_critical_json_rpc_error(err, |_| false)
40}
41
42fn is_critical_json_rpc_error(
43 err: &RpcError,
44 is_critical_t: impl Fn(&serde_json::Value) -> bool,
45) -> bool {
46 match err {
47 RpcError::Variant0 { .. } => true,
48 RpcError::Variant1 { cause, .. } => is_critical_t(cause),
49 RpcError::Variant2 { .. } => false,
50 }
51}