dpp/data_contract/associated_token/token_configuration/
mod.rs1use crate::data_contract::associated_token::token_configuration::v0::TokenConfigurationV0;
2#[cfg(feature = "json-conversion")]
3use crate::serialization::JsonConvertible;
4#[cfg(feature = "value-conversion")]
5use crate::serialization::ValueConvertible;
6use bincode::{Decode, Encode};
7use derive_more::From;
8use serde::{Deserialize, Serialize};
9use std::borrow::Cow;
10use std::fmt;
11
12pub mod accessors;
13mod methods;
14pub mod v0;
15
16#[cfg_attr(feature = "json-conversion", derive(JsonConvertible))]
17#[cfg_attr(feature = "value-conversion", derive(ValueConvertible))]
18#[derive(Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, From)]
19#[serde(tag = "$formatVersion")]
20pub enum TokenConfiguration {
21 #[serde(rename = "0")]
22 V0(TokenConfigurationV0),
23}
24impl TokenConfiguration {
25 pub fn as_cow_v0(&self) -> Cow<'_, TokenConfigurationV0> {
26 match self {
27 TokenConfiguration::V0(v0) => Cow::Borrowed(v0),
28 }
29 }
30}
31
32impl fmt::Display for TokenConfiguration {
33 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34 match self {
35 TokenConfiguration::V0(v0) => write!(f, "{}", v0),
36 }
37 }
38}
39
40#[cfg(all(test, feature = "json-conversion"))]
41mod tests {
42 use super::*;
43 use crate::serialization::JsonConvertible;
44
45 #[test]
46 fn token_configuration_large_supply_json_round_trip() {
47 let mut config = TokenConfigurationV0::default_most_restrictive();
48 config.base_supply = u64::MAX;
49 let config = TokenConfiguration::V0(config);
50
51 let json = config.to_json().expect("to_json should succeed");
52
53 assert!(
55 json["baseSupply"].is_string(),
56 "baseSupply should be a string for large values, got: {:?}",
57 json["baseSupply"]
58 );
59 assert_eq!(json["baseSupply"].as_str().unwrap(), u64::MAX.to_string());
60
61 let restored = TokenConfiguration::from_json(json).expect("from_json should succeed");
62 assert_eq!(config, restored);
63 }
64}