Skip to main content

UserProfile

Struct UserProfile 

Source
pub struct UserProfile<'a> {
    pub id: UserId,
    pub login_name: Cow<'a, str>,
    pub display_name: Option<Cow<'a, str>>,
    pub profile_pic_url: Option<Url>,
    pub groups: Vec<Cow<'a, str>>,
}
Expand description

Display-friendly data for a User. Includes the Login::login_name for display purposes. but not the Login::provider. Also includes derived data from one of the Logins associated with a User.

Fields§

§id: UserId

The unique integer ID of this Tailscale user this UserProfile is associated with.

§login_name: Cow<'a, str>

An email address or “email-ish” string (e.g. “alice@github”) associated with this Tailscale user’s UserProfile, according to the IdP. For display purposes only.

§display_name: Option<Cow<'a, str>>

If populated, the display name of this Tailscale user (e.g. “Alice Smith”), according to the IdP.

§profile_pic_url: Option<Url>

If populated, a URL to a profile picture representing this Tailscale user.

§groups: Vec<Cow<'a, str>>

A subset of the groups that contain this user and that the coordination server was configured to report to this node: either SCIM groups (e.g. engineering@example.com) or group names from the tailnet policy document (e.g. group:eng).

This is the one attribute of an owning user that a node cannot re-derive from anything else control sends it, so it is what an embedder authorising an inbound connection on group membership needs (Go surfaces it through WhoIs).

Control sorts the list when it loads the profile from storage, so it arrives sorted; it is carried through verbatim rather than re-sorted here. The field is omitempty on the wire — an older control server, or a tailnet that reports no groups to this node, simply omits it — so it decodes to an empty list, never a missing profile. null (what a non-Go control plane emits for an empty slice) lands the same way, per the crate-wide null_to_default convention for bare Vec fields.

Trait Implementations§

Source§

impl<'a> Clone for UserProfile<'a>

Source§

fn clone(&self) -> UserProfile<'a>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for UserProfile<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de: 'a, 'a> Deserialize<'de> for UserProfile<'a>

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<'a> Eq for UserProfile<'a>

Source§

impl<'a> PartialEq for UserProfile<'a>

Source§

fn eq(&self, other: &UserProfile<'a>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<'a> StructuralPartialEq for UserProfile<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for UserProfile<'a>

§

impl<'a> RefUnwindSafe for UserProfile<'a>

§

impl<'a> Send for UserProfile<'a>

§

impl<'a> Sync for UserProfile<'a>

§

impl<'a> Unpin for UserProfile<'a>

§

impl<'a> UnsafeUnpin for UserProfile<'a>

§

impl<'a> UnwindSafe for UserProfile<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.