1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
//! # usdshe
//!
//! `usdshe` is a utility crate for conveniently accessing USDC (USD Coin)
//! contract addresses on various blockchain networks.
//!
//! It provides a simple trait, [`Usdc`], which can be implemented for different
//! chain identifiers to retrieve the respective USDC contract address. Currently,
//! an implementation for [`alloy_chains::NamedChain`] is provided.
//!
//! ## Examples
//!
//! ```rust
//! use usdshe::{Usdc, UsdcError};
//! use alloy_chains::NamedChain;
//! use alloy_primitives::Address;
//! use std::str::FromStr;
//!
//! // Get Mainnet USDC address
//! match NamedChain::Mainnet.usdc_address() {
//! Ok(address) => {
//! assert_eq!(
//! address,
//! Address::from_str("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48").unwrap()
//! );
//! println!("Mainnet USDC Address: {}", address);
//! }
//! Err(e) => eprintln!("Error fetching Mainnet USDC: {}", e),
//! }
//!
//! // Attempt to get USDC address for an unsupported chain
//! // Assuming Kovan is not in the supported list for this example.
//! // Replace with a NamedChain variant that is genuinely not in your match statement
//! // if Kovan (or another example) gets added.
//! // For instance, if `NamedChain::Gnosis` is unsupported:
//! let some_unsupported_chain = NamedChain::Gnosis; // Example
//! match some_unsupported_chain.usdc_address() {
//! Ok(address) => panic!("Should not find address for {:?}", some_unsupported_chain),
//! Err(UsdcError::UnsupportedChain(chain)) => {
//! assert_eq!(chain, some_unsupported_chain);
//! eprintln!("Correctly failed for unsupported chain: {:?}", chain);
//! }
//! Err(e) => panic!("Unexpected error: {}", e),
//! }
//! ```
use NamedChain;
use Address;
use Error;
pub use *;
/// Represents errors that can occur when retrieving a USDC address.
/// A trait for types that can provide a USDC contract address.
/// Implementation of the [`Usdc`] trait for the [`alloy_chains::NamedChain`] enum.
///
/// This implementation provides USDC addresses for a predefined set of chains.