pub struct Principal { /* private fields */ }Expand description
Generic ID on Internet Computer.
Principals are generic identifiers for canisters, users and possibly other concepts in the future. As far as most uses of the IC are concerned they are opaque binary blobs with a length between 0 and 29 bytes, and there is intentionally no mechanism to tell canister ids and user ids apart.
Note a principal is not necessarily tied with a public key-pair, yet we need at least a key-pair of a related principal to sign requests.
A Principal can be serialized to a byte array (Vec<u8>) or a text
representation, but the inner structure of the byte representation
is kept private.
Example of using a Principal object:
use ic_principal::Principal;
let text = "aaaaa-aa"; // The management canister ID.
let principal = Principal::from_text(text).expect("Could not decode the principal.");
assert_eq!(principal.as_slice(), &[]);
assert_eq!(principal.to_text(), text);
Serialization is enabled with the “serde” feature. It supports serializing to a byte bufer for non-human readable serializer, and a string version for human readable serializers.
use ic_principal::Principal;
use serde::{Deserialize, Serialize};
use std::str::FromStr;
#[derive(Serialize)]
struct Data {
id: Principal,
}
let id = Principal::from_str("2chl6-4hpzw-vqaaa-aaaaa-c").unwrap();
// JSON is human readable, so this will serialize to a textual
// representation of the Principal.
assert_eq!(
serde_json::to_string(&Data { id: id.clone() }).unwrap(),
r#"{"id":"2chl6-4hpzw-vqaaa-aaaaa-c"}"#
);
// CBOR is not human readable, so will serialize to bytes.
assert_eq!(
serde_cbor::to_vec(&Data { id: id.clone() }).unwrap(),
&[161, 98, 105, 100, 73, 239, 205, 171, 0, 0, 0, 0, 0, 1],
);Implementations§
§impl Principal
impl Principal
pub const MAX_LENGTH_IN_BYTES: usize = 29usize
pub const fn management_canister() -> Principal
pub const fn management_canister() -> Principal
Construct a Principal of the IC management canister
pub fn self_authenticating<P>(public_key: P) -> Principal
Available on crate feature self_authenticating only.
pub fn self_authenticating<P>(public_key: P) -> Principal
self_authenticating only.Construct a self-authenticating ID from public key
pub const fn from_slice(slice: &[u8]) -> Principal
pub const fn from_slice(slice: &[u8]) -> Principal
pub const fn try_from_slice(slice: &[u8]) -> Result<Principal, PrincipalError>
Available on crate feature convert only.
pub const fn try_from_slice(slice: &[u8]) -> Result<Principal, PrincipalError>
convert only.Construct a Principal from a slice of bytes.
pub fn from_text<S>(text: S) -> Result<Principal, PrincipalError>
Available on crate feature convert only.
pub fn from_text<S>(text: S) -> Result<Principal, PrincipalError>
convert only.Parse a Principal from text representation.
Trait Implementations§
source§impl CandidType for Principal
impl CandidType for Principal
§impl<'de> Deserialize<'de> for Principal
Available on crate feature serde only.
impl<'de> Deserialize<'de> for Principal
serde only.§fn deserialize<D>(
deserializer: D
) -> Result<Principal, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D
) -> Result<Principal, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
§impl Ord for Principal
impl Ord for Principal
§impl PartialOrd for Principal
impl PartialOrd for Principal
§fn partial_cmp(&self, other: &Principal) -> Option<Ordering>
fn partial_cmp(&self, other: &Principal) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self and other) and is used by the <=
operator. Read more§impl Serialize for Principal
Available on crate feature serde only.
impl Serialize for Principal
serde only.§fn serialize<S>(
&self,
serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
impl Copy for Principal
impl Eq for Principal
impl StructuralEq for Principal
impl StructuralPartialEq for Principal
Auto Trait Implementations§
impl RefUnwindSafe for Principal
impl Send for Principal
impl Sync for Principal
impl Unpin for Principal
impl UnwindSafe for Principal
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> ToHex for T
impl<T> ToHex for T
source§fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
self into the result. Lower case
letters are used (e.g. f9b4ca)source§fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
self into the result. Upper case
letters are used (e.g. F9B4CA)