ethers_abi/
state_mutability.rs

1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3
4/// Whether a function modifies or reads blockchain state
5#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
6#[derive(Debug, Copy, Clone, PartialEq, Eq)]
7pub enum StateMutability {
8	/// Specified not to read blockchain state
9	#[cfg_attr(feature = "serde", serde(rename = "pure"))]
10	Pure,
11	/// Specified to not modify the blockchain state
12	#[cfg_attr(feature = "serde", serde(rename = "view"))]
13	View,
14	/// Function does not accept Ether - the default
15	#[cfg_attr(feature = "serde", serde(rename = "nonpayable"))]
16	NonPayable,
17	/// Function accepts Ether
18	#[cfg_attr(feature = "serde", serde(rename = "payable"))]
19	Payable,
20}
21
22impl Default for StateMutability {
23	fn default() -> Self {
24		Self::NonPayable
25	}
26}
27
28#[cfg(all(test, feature = "serde"))]
29mod test {
30	#[cfg(not(feature = "std"))]
31	use crate::no_std_prelude::*;
32	use crate::{tests::assert_json_eq, StateMutability};
33
34	#[test]
35	fn state_mutability() {
36		let json = r#"
37			[
38				"pure",
39				"view",
40				"nonpayable",
41				"payable"
42			]
43		"#;
44
45		let deserialized: Vec<StateMutability> = serde_json::from_str(json).unwrap();
46
47		assert_eq!(
48			deserialized,
49			vec![StateMutability::Pure, StateMutability::View, StateMutability::NonPayable, StateMutability::Payable,]
50		);
51
52		assert_json_eq(json, &serde_json::to_string(&deserialized).unwrap());
53	}
54}