# Struct Tag

    pub struct Tag(/* private fields */);

Expand description

An OpenType tag.

Per the spec, a tag is a 4-byte array where each byte is in the printable ASCII range `(0x20..=0x7E)`.

We do not strictly enforce this constraint as it is possible to encounter invalid tags in existing fonts, and these need to be representable.

When creating new tags we encourage ensuring that the tag is valid, either by using `Tag::new_checked` or by calling `Tag::validate` on an existing tag.

## Implementations§

§

### impl Tag

#### pub const fn new(src: &[u8; 4]) -> Tag

Construct a `Tag` from raw bytes.

This does not perform any validation; use `Tag::new_checked` for a constructor that validates input.

#### pub const fn new_checked(src: &[u8]) -> Result<Tag, InvalidTag>

Attempt to create a `Tag` from raw bytes.

The slice must contain between 1 and 4 bytes, each in the printable ascii range (`0x20..=0x7E`).

If the input has fewer than four bytes, it will be padded with spaces.

This method returns an `InvalidTag` error if the tag does conform to the spec.

#### pub const fn from_u32(src: u32) -> Tag

Construct a new `Tag` from a big-endian `u32`, without performing validation.

This is provided as a convenience method for interop with code that stores tags as big-endian u32s.

#### pub const fn from_be_bytes(bytes: [u8; 4]) -> Tag

Create a tag from raw big-endian bytes.

Prefer to use `Tag::new` (in const contexts) or `Tag::new_checked` when creating a `Tag`.

This does not check the input, and is only intended to be used during parsing, where invalid inputs are accepted.

#### pub const fn to_be_bytes(self) -> [u8; 4]

Return the memory representation of this tag.

#### pub fn into_bytes(self) -> [u8; 4]

Return the raw byte array representing this tag.

#### pub fn validate(self) -> Result<(), InvalidTag>

Check that the tag conforms with the spec.

This is intended for use during things like santization or lint passes on existing fonts; if you are creating a new tag, you should prefer `Tag::new_checked`.

Specifically, this checks the following conditions

- the tag is not empty
- the tag contains only characters in the printable ascii range (`0x20..=0x1F`)
- the tag does not begin with a space
- the tag does not contain any non-space characters after the first space

## Trait Implementations§

§

### impl AsRef<[u8]> for Tag

§

#### fn as_ref(&self) -> &[u8] ⓘ

Converts this type into a shared reference of the (usually inferred) input type.
§

### impl Borrow<[u8; 4]> for Tag

§

#### fn borrow(&self) -> &[u8; 4]

Immutably borrows from an owned value. Read more
§

### impl Clone for Tag

§

#### fn clone(&self) -> Tag

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from `source`. Read more
§

### impl Debug for Tag

§

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

Formats the value using the given formatter. Read more
§

### impl Default for Tag

§

#### fn default() -> Tag

Returns the “default value” for a type. Read more
§

### impl Display for Tag

§

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

Formats the value using the given formatter. Read more
§

### impl Domain for Tag

§

#### fn to_u32(&self) -> u32

Converts this value of `T` to a value in u32. Read more
§

#### fn from_u32(member: InDomain) -> Tag

Converts a mapped u32 value back to T. Read more
§

#### fn contains(_value: u32) -> bool

Returns `true` if the value is part of this domain.
§

#### fn is_continuous() -> bool

Returns true if all u32 values between the mapped u32 min and mapped u32 max value of T are used.
§

#### fn ordered_values() -> impl DoubleEndedIterator

Returns an iterator which iterates over all values in the domain of `T` Read more
§

#### fn ordered_values_range(range: RangeInclusive<Tag>) -> impl DoubleEndedIterator

Return an iterator which iterates over all values of T in the given range. Read more
§

#### fn count() -> u64

Returns the number of members in the domain.
§

### impl FromStr for Tag

§

#### type Err = InvalidTag

The associated error which can be returned from parsing.
§

#### fn from_str(src: &str) -> Result<Tag, <Tag as FromStr>::Err>

Parses a string `s` to return a value of this type. Read more
§

### impl Hash for Tag

§

#### fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given `Hasher`. Read more
1.3.0 · Source§

#### fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given `Hasher`. Read more
§

### impl Ord for Tag

§

#### fn cmp(&self, other: &Tag) -> Ordering

This method returns an `Ordering` between `self` and `other`. Read more
1.21.0 · Source§

#### fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

#### fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

#### fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
§

### impl PartialEq<&[u8]> for Tag

§

#### fn eq(&self, other: &&[u8]) -> bool

Tests for `self` and `other` values to be equal, and is used by `==`.
1.0.0 · Source§

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

Tests for `!=`. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

### impl PartialEq<&str> for Tag

§

#### fn eq(&self, other: &&str) -> bool

Tests for `self` and `other` values to be equal, and is used by `==`.
1.0.0 · Source§

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

Tests for `!=`. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

### impl PartialEq<[u8; 4]> for Tag

§

#### fn eq(&self, other: &[u8; 4]) -> bool

Tests for `self` and `other` values to be equal, and is used by `==`.
1.0.0 · Source§

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

Tests for `!=`. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

### impl PartialEq<str> for Tag

§

#### fn eq(&self, other: &str) -> bool

Tests for `self` and `other` values to be equal, and is used by `==`.
1.0.0 · Source§

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

Tests for `!=`. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

### impl PartialEq for Tag

§

#### fn eq(&self, other: &Tag) -> bool

Tests for `self` and `other` values to be equal, and is used by `==`.
1.0.0 · Source§

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

Tests for `!=`. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

### impl PartialOrd for Tag

§

#### fn partial_cmp(&self, other: &Tag) -> Option<Ordering>

This method returns an ordering between `self` and `other` values if one exists. Read more
1.0.0 · Source§

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

Tests less than (for `self` and `other`) and is used by the `<` operator. Read more
1.0.0 · Source§

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

Tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more
1.0.0 · Source§

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

Tests greater than (for `self` and `other`) and is used by the `>` operator. Read more
1.0.0 · Source§

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

Tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more
§

### impl Scalar for Tag

§

#### type Raw = [u8; 4]

The raw byte representation of this type.
§

#### fn to_raw(self) -> <Tag as Scalar>::Raw

Encode this type as raw big-endian bytes
§

#### fn from_raw(raw: <Tag as Scalar>::Raw) -> Tag

Create an instance of this type from raw big-endian bytes
§

#### fn read(slice: &[u8]) -> Option<Self>

Attempt to read a scalar from a slice. Read more
§

### impl Zeroable for Tag

§

#### fn zeroed() -> Self

Calls `zeroed`. Read more
§

### impl AnyBitPattern for Tag

§

### impl Copy for Tag

§

### impl Eq for Tag

§

### impl StructuralPartialEq for Tag

## Auto Trait Implementations§

§

### impl Freeze for Tag

§

### impl RefUnwindSafe for Tag

§

### impl Send for Tag

§

### impl Sync for Tag

§

### impl Unpin for Tag

§

### impl UnwindSafe for Tag

## Blanket Implementations§

Source§

### impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

#### fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
Source§

#### fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
§

### impl<T> Also for T

§

#### fn also<F>(self, block: F) -> Self
where F: FnOnce(&mut Self),

Apply a function to this value and return the (possibly) modified value.
Source§

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

Source§

#### fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more
§

### impl<T> AnyEq for T
where T: Any + PartialEq,

§

#### fn equals(&self, other: &(dyn Any + 'static)) -> bool

§

#### fn as_any(&self) -> &(dyn Any + 'static)

§

### impl<T, Res> Apply<Res> for T
where T: ?Sized,

§

#### fn apply<F>(self, f: F) -> Res
where F: FnOnce(Self) -> Res, Self: Sized,

Apply a function which takes the parameter by value.
§

#### fn apply_ref<F>(&self, f: F) -> Res
where F: FnOnce(&Self) -> Res,

Apply a function which takes the parameter by reference.
§

#### fn apply_mut<F>(&mut self, f: F) -> Res
where F: FnOnce(&mut Self) -> Res,

Apply a function which takes the parameter by mutable reference.
Source§

### impl<T, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

#### fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

### impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

#### fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
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<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

#### type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in `parameters` when converting.
Source§

#### fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts `self` into `C`, using the provided parameters.
§

### impl<T> CheckedBitPattern for T
where T: AnyBitPattern,

§

#### type Bits = T

`Self` must have the same layout as the specified `Bits` except for the possible invalid bit patterns being checked during `is_valid_bit_pattern`.
§

#### fn is_valid_bit_pattern(_bits: &T) -> bool

If this function returns true, then it must be valid to reinterpret `bits` as `&Self`.
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
§

### impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

#### fn compare(&self, key: &K) -> Ordering

Compare self to `key` and return their ordering.
Source§

### impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

#### fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
§

### impl<T> Downcast for T
where T: Any,

§

#### fn into_any(self: Box<T>) -> Box<dyn Any>

Convert `Box<dyn Trait>` (where `Trait: Downcast`) to `Box<dyn Any>`. `Box<dyn Any>` can then be further `downcast` into `Box<ConcreteType>` where `ConcreteType` implements `Trait`.
§

#### fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert `Rc<Trait>` (where `Trait: Downcast`) to `Rc<Any>`. `Rc<Any>` can then be further `downcast` into `Rc<ConcreteType>` where `ConcreteType` implements `Trait`.
§

#### fn as_any(&self) -> &(dyn Any + 'static)

Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot generate `&Any`’s vtable from `&Trait`’s.
§

#### fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot generate `&mut Any`’s vtable from `&mut Trait`’s.
§

### impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

#### fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert `Arc<Trait>` (where `Trait: Downcast`) to `Arc<Any>`. `Arc<Any>` can then be further `downcast` into `Arc<ConcreteType>` where `ConcreteType` implements `Trait`.
§

### impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

#### fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

### impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

#### fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

### impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

#### fn equivalent(&self, key: &K) -> bool

Compare self to `key` and return `true` if they are equal.
§

### impl<T> FixedSize for T
where T: Scalar,

§

#### const RAW_BYTE_LEN: usize

The raw size of this type, in bytes. Read more
Source§

### impl<T> From<T> for T

Source§

#### fn from(t: T) -> T

Returns the argument unchanged.

Source§

### impl<T> FromAngle<T> for T

Source§

#### fn from_angle(angle: T) -> T

Performs a conversion from `angle`.
Source§

### impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

#### fn from_stimulus(other: U) -> T

Converts `other` into `Self`, while performing the appropriate scaling, rounding and clamping.
§

### impl<T> Instrument for T

§

#### fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [`Span`], returning an `Instrumented` wrapper. Read more
§

#### fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current `Span`, returning an `Instrumented` wrapper. Read more
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, U> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

#### fn into_angle(self) -> U

Performs a conversion into `T`.
§

### impl<State, Message> IntoBoot<State, Message> for State

§

#### fn into_boot(self) -> (State, Task<Message>)

Turns some type into the initial state of some `Application`.
Source§

### impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

#### type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in `parameters` when converting.
Source§

#### fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts `self` into `C`, using the provided parameters.
Source§

### impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

#### fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

### impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

#### fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

### impl<T> IntoStimulus<T> for T

Source§

#### fn into_stimulus(self) -> T

Converts `self` into `T`, while performing the appropriate scaling, rounding and clamping.
§

### impl<T> NoneValue for T
where T: Default,

§

#### type NoneType = T

§

#### fn null_value() -> T

The none-equivalent value.
Source§

### impl<T> Same for T

Source§

#### type Output = T

Should always be `Self`
Source§

### impl<T> ToHex for T
where T: AsRef<[u8]>,

Source§

#### fn encode_hex<U>(&self) -> U
where U: FromIterator<char>,

Encode the hex strict representing `self` into the result. Lower case letters are used (e.g. `f9b4ca`)
Source§

#### fn encode_hex_upper<U>(&self) -> U
where U: FromIterator<char>,

Encode the hex strict representing `self` into the result. Upper case letters are used (e.g. `F9B4CA`)
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
§

### impl<T> ToSmolStr for T
where T: Display + ?Sized,

§

#### fn to_smolstr(&self) -> SmolStr

Source§

### impl<T> ToString for T
where T: Display + ?Sized,

Source§

#### fn to_string(&self) -> String

Converts the given value to a `String`. Read more
Source§

### impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

#### type Error = <C as TryFromComponents<T>>::Error

The error for when `try_into_colors` fails to cast.
Source§

#### fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
Source§

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

Source§

#### type Error = Infallible

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

#### fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
Source§

### impl<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

#### fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an `OutOfBounds` error is returned which contains the unclamped color. Read more
Source§

### impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

#### fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

### impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

#### fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.
§

### impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

#### fn vzip(self) -> V

§

### impl<T> WithSubscriber for T

§

#### fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided `Subscriber` to this type, returning a [`WithDispatch`] wrapper. Read more
§

#### fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default `Subscriber` to this type, returning a [`WithDispatch`] wrapper. Read more
§

### impl<T> MaybeClone for T

§

### impl<T> MaybeDebug for T

§

### impl<T> MaybeSend for T
where T: Send,

§

### impl<T> MaybeSend for T
where T: Send,

§

### impl<T> MaybeSync for T
where T: Sync,

§

### impl<T> MaybeSync for T
where T: Sync,