pub struct AccountId(/* private fields */);Expand description
NEAR Account Identifier.
This is a unique, syntactically valid, human-readable account identifier on the NEAR network.
See the crate-level docs for information about validation.
Also see Error kind precedence.
§Examples
use near_account_id::AccountId;
let alice: AccountId = "alice.near".parse().unwrap();
assert!("ƒelicia.near".parse::<AccountId>().is_err()); // (ƒ is not f)Implementations§
Source§impl AccountId
impl AccountId
Sourcepub const MIN_LEN: usize = crate::validation::MIN_LEN
pub const MIN_LEN: usize = crate::validation::MIN_LEN
Shortest valid length for a NEAR Account ID.
Sourcepub const MAX_LEN: usize = crate::validation::MAX_LEN
pub const MAX_LEN: usize = crate::validation::MAX_LEN
Longest valid length for a NEAR Account ID.
Sourcepub fn validate(account_id: &str) -> Result<(), ParseAccountError>
pub fn validate(account_id: &str) -> Result<(), ParseAccountError>
Validates a string as a well-structured NEAR Account ID.
Checks Account ID validity without constructing an AccountId instance.
§Examples
use near_account_id::{AccountId, ParseErrorKind};
assert!(AccountId::validate("alice.near").is_ok());
assert!(
matches!(
AccountId::validate("ƒelicia.near"), // fancy ƒ!
Err(err) if err.kind() == &ParseErrorKind::InvalidChar
)
);§Error kind precedence
If an Account ID has multiple format violations, the first one would be reported.
§Examples
use near_account_id::{AccountId, ParseErrorKind};
assert!(
matches!(
AccountId::validate("A__ƒƒluent."),
Err(err) if err.kind() == &ParseErrorKind::InvalidChar
)
);
assert!(
matches!(
AccountId::validate("a__ƒƒluent."),
Err(err) if err.kind() == &ParseErrorKind::RedundantSeparator
)
);
assert!(
matches!(
AccountId::validate("aƒƒluent."),
Err(err) if err.kind() == &ParseErrorKind::InvalidChar
)
);
assert!(
matches!(
AccountId::validate("affluent."),
Err(err) if err.kind() == &ParseErrorKind::RedundantSeparator
)
);Methods from Deref<Target = AccountIdRef>§
pub const MIN_LEN: usize = crate::validation::MIN_LEN
pub const MAX_LEN: usize = crate::validation::MAX_LEN
Sourcepub fn as_str(&self) -> &str
pub fn as_str(&self) -> &str
Returns a string slice of the entire Account ID.
§Examples
use near_account_id::AccountIdRef;
let carol = AccountIdRef::new("carol.near").unwrap();
assert_eq!("carol.near", carol.as_str());Sourcepub fn is_top_level(&self) -> bool
pub fn is_top_level(&self) -> bool
Returns true if the account ID is a top-level NEAR Account ID.
See Top-level Accounts.
§Examples
use near_account_id::AccountIdRef;
let near_tla = AccountIdRef::new("near").unwrap();
assert!(near_tla.is_top_level());
// "alice.near" is a sub account of "near" account
let alice = AccountIdRef::new("alice.near").unwrap();
assert!(!alice.is_top_level());Sourcepub fn sub_account(
&self,
name: impl AsRef<str>,
) -> Result<AccountId, ParseAccountError>
pub fn sub_account( &self, name: impl AsRef<str>, ) -> Result<AccountId, ParseAccountError>
Returns sub account of current account: {name}.{parent}.
Returns Err if the resulting sub account is invalid (e.g. too long).
§Examples
use near_account_id::AccountIdRef;
let parent = AccountIdRef::new("near").unwrap();
let child = parent.sub_account("alice").unwrap();
assert!(child.is_sub_account_of(parent));Sourcepub fn parent(&self) -> Option<&AccountIdRef>
pub fn parent(&self) -> Option<&AccountIdRef>
Returns parent account if current account is a subaccount.
§Examples
use near_account_id::AccountIdRef;
let tla = AccountIdRef::new("near").unwrap();
assert_eq!(tla.parent(), None);
let child = AccountIdRef::new("alice.near").unwrap();
let parent = child.parent().unwrap();
assert_eq!(parent, "near");
assert!(child.is_sub_account_of(parent));Sourcepub fn is_sub_account_of(&self, parent: impl AsRef<AccountIdRef>) -> bool
pub fn is_sub_account_of(&self, parent: impl AsRef<AccountIdRef>) -> bool
Returns true if the AccountId is a direct sub-account of the provided parent account.
See Subaccounts.
§Examples
use near_account_id::AccountId;
let near_tla: AccountId = "near".parse().unwrap();
assert!(near_tla.is_top_level());
let alice: AccountId = "alice.near".parse().unwrap();
assert!(alice.is_sub_account_of(&near_tla));
let alice_app: AccountId = "app.alice.near".parse().unwrap();
// While app.alice.near is a sub account of alice.near,
// app.alice.near is not a sub account of near
assert!(alice_app.is_sub_account_of(&alice));
assert!(!alice_app.is_sub_account_of(&near_tla));Sourcepub fn get_account_type(&self) -> AccountType
pub fn get_account_type(&self) -> AccountType
Returns AccountType::EthImplicitAccount if the AccountId is a 40 characters long hexadecimal prefixed with ‘0x’.
Returns AccountType::NearImplicitAccount if the AccountId is a 64 characters long hexadecimal.
Otherwise, returns AccountType::NamedAccount.
See Implicit-Accounts.
§Examples
use near_account_id::{AccountId, AccountType};
let alice: AccountId = "alice.near".parse().unwrap();
assert!(alice.get_account_type() == AccountType::NamedAccount);
let eth_rando = "0xb794f5ea0ba39494ce839613fffba74279579268"
.parse::<AccountId>()
.unwrap();
assert!(eth_rando.get_account_type() == AccountType::EthImplicitAccount);
let near_rando = "98793cd91a3f870fb126f66285808c7e094afcfc4eda8a970f6648cdf0dbd6de"
.parse::<AccountId>()
.unwrap();
assert!(near_rando.get_account_type() == AccountType::NearImplicitAccount);Sourcepub fn is_system(&self) -> bool
pub fn is_system(&self) -> bool
Returns true if this AccountId is the system account.
See System account.
§Examples
use near_account_id::AccountId;
let alice: AccountId = "alice.near".parse().unwrap();
assert!(!alice.is_system());
let system: AccountId = "system".parse().unwrap();
assert!(system.is_system());Sourcepub fn get_parent_account_id(&self) -> Option<&AccountIdRef>
pub fn get_parent_account_id(&self) -> Option<&AccountIdRef>
Returns parent’s account id reference
§Examples
use near_account_id::AccountIdRef;
let alice: &AccountIdRef = AccountIdRef::new_or_panic("alice.near");
let parent: &AccountIdRef = alice.get_parent_account_id().unwrap();
assert!(alice.is_sub_account_of(parent));
let near: &AccountIdRef = AccountIdRef::new_or_panic("near");
assert!(near.get_parent_account_id().is_none());
let implicit: &AccountIdRef = AccountIdRef::new_or_panic("248e104d1d4764d713c4211c13808c8fc887869c580f4178e60538ac5c2a0b26");
assert!(implicit.get_parent_account_id().is_none());Trait Implementations§
Source§impl AsRef<AccountIdRef> for AccountId
impl AsRef<AccountIdRef> for AccountId
Source§fn as_ref(&self) -> &AccountIdRef
fn as_ref(&self) -> &AccountIdRef
Source§impl Borrow<AccountIdRef> for AccountId
impl Borrow<AccountIdRef> for AccountId
Source§fn borrow(&self) -> &AccountIdRef
fn borrow(&self) -> &AccountIdRef
Source§impl BorshDeserialize for AccountId
impl BorshDeserialize for AccountId
fn deserialize_reader<R>(rd: &mut R) -> Result<AccountId, Error>where
R: Read,
Source§fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
Source§fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_reader<R>(reader: &mut R) -> Result<Self, Error>where
R: Read,
Source§impl BorshSerialize for AccountId
impl BorshSerialize for AccountId
Source§impl<'de> Deserialize<'de> for AccountId
impl<'de> Deserialize<'de> for AccountId
Source§fn deserialize<D>(
deserializer: D,
) -> Result<AccountId, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<AccountId, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
impl Eq for AccountId
Source§impl<'a> From<&'a AccountIdRef> for AccountId
impl<'a> From<&'a AccountIdRef> for AccountId
Source§fn from(id: &'a AccountIdRef) -> AccountId
fn from(id: &'a AccountIdRef) -> AccountId
Source§impl From<AccountId> for ContractState
impl From<AccountId> for ContractState
Source§impl Ord for AccountId
impl Ord for AccountId
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl<'a> PartialEq<&'a AccountIdRef> for AccountId
impl<'a> PartialEq<&'a AccountIdRef> for AccountId
Source§fn eq(&self, other: &&'a AccountIdRef) -> bool
fn eq(&self, other: &&'a AccountIdRef) -> bool
self and other values to be equal, and is used by ==.Source§impl PartialEq<AccountId> for AccountIdRef
impl PartialEq<AccountId> for AccountIdRef
Source§impl<'a> PartialEq<AccountId> for &'a AccountIdRef
impl<'a> PartialEq<AccountId> for &'a AccountIdRef
Source§impl PartialEq<AccountIdRef> for AccountId
impl PartialEq<AccountIdRef> for AccountId
Source§fn eq(&self, other: &AccountIdRef) -> bool
fn eq(&self, other: &AccountIdRef) -> bool
self and other values to be equal, and is used by ==.