diff --git a/main/FunnyBones/all.html b/main/FunnyBones/all.html new file mode 100644 index 0000000..863cd56 --- /dev/null +++ b/main/FunnyBones/all.html @@ -0,0 +1 @@ +List of all items in this crate

List of all items

Structs

Enums

Functions

\ No newline at end of file diff --git a/main/FunnyBones/enum.Mode.html b/main/FunnyBones/enum.Mode.html new file mode 100644 index 0000000..3c46917 --- /dev/null +++ b/main/FunnyBones/enum.Mode.html @@ -0,0 +1,81 @@ +Mode in FunnyBones - Rust

Enum FunnyBones::Mode

source ·
pub(crate) enum Mode {
+    Bones,
+    Animation,
+}

Variants§

§

Bones

§

Animation

Trait Implementations§

source§

impl Clone for Mode

source§

fn clone(&self) -> Mode

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Mode

source§

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

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

impl Default for Mode

source§

fn default() -> Mode

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

impl PartialEq for Mode

source§

fn eq(&self, other: &Mode) -> 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.
source§

impl Copy for Mode

source§

impl Eq for Mode

source§

impl StructuralPartialEq for Mode

Auto Trait Implementations§

§

impl Freeze for Mode

§

impl RefUnwindSafe for Mode

§

impl Send for Mode

§

impl Sync for Mode

§

impl Unpin for Mode

§

impl UnwindSafe for Mode

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.
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, 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<A> Cast for A

§

fn cast<To>(self) -> To
where + To: CastFrom<A>,

Casts self to the To type. This may be a lossy operation.
§

impl<A> CastFrom<A> for A

§

fn from_cast(from: A) -> A

Returns from as Self.
§

impl<A, B> CastInto<A> for B
where + A: CastFrom<B>,

§

fn cast_into(self) -> A

Returns self as To.
source§

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

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
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<T> for T

§

fn downcast(&self) -> &T

§

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

Compare self to key and return true if they are equal.
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.
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
§

impl<Unit> IntoComponents<Unit> for Unit
where + Unit: Copy,

§

fn into_components(self) -> (Unit, Unit)

Extracts this type’s 2d vector components.
§

fn to_vec<Type>(self) -> Type
where + Type: FromComponents<Unit>,

Converts this type to another type using [FromComponents] and +[IntoComponents].
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<R, P> ReadPrimitive<R> for P
where + R: Read + ReadEndian<P>, + P: Default,

source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
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, 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<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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> WasmNotSend for T
where + T: Send,

§

impl<T> WasmNotSendSync for T
where + T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where + T: Sync,

\ No newline at end of file diff --git a/main/FunnyBones/fn.add_bones_to_skeleton.html b/main/FunnyBones/fn.add_bones_to_skeleton.html new file mode 100644 index 0000000..afff583 --- /dev/null +++ b/main/FunnyBones/fn.add_bones_to_skeleton.html @@ -0,0 +1,5 @@ +add_bones_to_skeleton in FunnyBones - Rust

Function FunnyBones::add_bones_to_skeleton

source ·
pub(crate) fn add_bones_to_skeleton(
+    connected_to: BoneAxis,
+    bones: &Dynamic<Vec<SkeletalBone>>,
+    skeleton: &mut Skeleton,
+)
\ No newline at end of file diff --git a/main/FunnyBones/fn.bone_editor.html b/main/FunnyBones/fn.bone_editor.html new file mode 100644 index 0000000..e3dbe10 --- /dev/null +++ b/main/FunnyBones/fn.bone_editor.html @@ -0,0 +1,4 @@ +bone_editor in FunnyBones - Rust

Function FunnyBones::bone_editor

source ·
pub(crate) fn bone_editor(
+    bone: SkeletalBone,
+    watcher: &ChangeAggregator,
+) -> impl MakeWidget
\ No newline at end of file diff --git a/main/FunnyBones/fn.bone_property_editor.html b/main/FunnyBones/fn.bone_property_editor.html new file mode 100644 index 0000000..c833eab --- /dev/null +++ b/main/FunnyBones/fn.bone_property_editor.html @@ -0,0 +1,5 @@ +bone_property_editor in FunnyBones - Rust

Function FunnyBones::bone_property_editor

source ·
pub(crate) fn bone_property_editor(
+    bone: SkeletalBone,
+    watcher: &ChangeAggregator,
+    is_root: bool,
+) -> impl MakeWidget
\ No newline at end of file diff --git a/main/FunnyBones/fn.bones_editor.html b/main/FunnyBones/fn.bones_editor.html new file mode 100644 index 0000000..7e1138c --- /dev/null +++ b/main/FunnyBones/fn.bones_editor.html @@ -0,0 +1,5 @@ +bones_editor in FunnyBones - Rust

Function FunnyBones::bones_editor

source ·
pub(crate) fn bones_editor(
+    label: &str,
+    bones: &Dynamic<Vec<SkeletalBone>>,
+    watcher: &ChangeAggregator,
+) -> impl MakeWidget
\ No newline at end of file diff --git a/main/FunnyBones/fn.main.html b/main/FunnyBones/fn.main.html new file mode 100644 index 0000000..bec4306 --- /dev/null +++ b/main/FunnyBones/fn.main.html @@ -0,0 +1 @@ +main in FunnyBones - Rust

Function FunnyBones::main

source ·
pub(crate) fn main() -> Result<()>
\ No newline at end of file diff --git a/main/FunnyBones/fn.skeleton_editor.html b/main/FunnyBones/fn.skeleton_editor.html new file mode 100644 index 0000000..89d0375 --- /dev/null +++ b/main/FunnyBones/fn.skeleton_editor.html @@ -0,0 +1,4 @@ +skeleton_editor in FunnyBones - Rust

Function FunnyBones::skeleton_editor

source ·
pub(crate) fn skeleton_editor(
+    skeleton: &EditingSkeleton,
+    watcher: &ChangeAggregator,
+) -> impl MakeWidget
\ No newline at end of file diff --git a/main/FunnyBones/index.html b/main/FunnyBones/index.html new file mode 100644 index 0000000..a3191c5 --- /dev/null +++ b/main/FunnyBones/index.html @@ -0,0 +1,2 @@ +FunnyBones - Rust

Crate FunnyBones

source ·
Expand description

The FunnyBones 2D Animation Editor.

+

Structs§

Enums§

Functions§

\ No newline at end of file diff --git a/main/FunnyBones/sidebar-items.js b/main/FunnyBones/sidebar-items.js new file mode 100644 index 0000000..a7528c1 --- /dev/null +++ b/main/FunnyBones/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Mode"],"fn":["add_bones_to_skeleton","bone_editor","bone_property_editor","bones_editor","main","skeleton_editor"],"struct":["ChangeAggregator","EditingSkeleton","SkeletalBone"]}; \ No newline at end of file diff --git a/main/FunnyBones/struct.ChangeAggregator.html b/main/FunnyBones/struct.ChangeAggregator.html new file mode 100644 index 0000000..2764d01 --- /dev/null +++ b/main/FunnyBones/struct.ChangeAggregator.html @@ -0,0 +1,71 @@ +ChangeAggregator in FunnyBones - Rust

Struct FunnyBones::ChangeAggregator

source ·
pub(crate) struct ChangeAggregator(pub(crate) Dynamic<usize>);

Tuple Fields§

§0: Dynamic<usize>

Implementations§

source§

impl ChangeAggregator

source

pub fn new<F, T>(when_changed: F) -> (Self, Dynamic<T>)
where + F: FnMut() -> T + Send + 'static, + T: PartialEq + Send + 'static,

source

pub fn watch<T>(&self, other: &Dynamic<T>)
where + T: Send + 'static,

Trait Implementations§

source§

impl Clone for ChangeAggregator

source§

fn clone(&self) -> ChangeAggregator

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for ChangeAggregator

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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.
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, 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<A> Cast for A

§

fn cast<To>(self) -> To
where + To: CastFrom<A>,

Casts self to the To type. This may be a lossy operation.
§

impl<A> CastFrom<A> for A

§

fn from_cast(from: A) -> A

Returns from as Self.
§

impl<A, B> CastInto<A> for B
where + A: CastFrom<B>,

§

fn cast_into(self) -> A

Returns self as To.
source§

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

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
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<T> for T

§

fn downcast(&self) -> &T

§

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.
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.
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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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, 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<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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> WasmNotSend for T
where + T: Send,

§

impl<T> WasmNotSendSync for T
where + T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where + T: Sync,

\ No newline at end of file diff --git a/main/FunnyBones/struct.EditingSkeleton.html b/main/FunnyBones/struct.EditingSkeleton.html new file mode 100644 index 0000000..2de09e1 --- /dev/null +++ b/main/FunnyBones/struct.EditingSkeleton.html @@ -0,0 +1,80 @@ +EditingSkeleton in FunnyBones - Rust

Struct FunnyBones::EditingSkeleton

source ·
pub(crate) struct EditingSkeleton {
+    pub(crate) root: SkeletalBone,
+    pub(crate) a_bones: Dynamic<Vec<SkeletalBone>>,
+}

Fields§

§root: SkeletalBone§a_bones: Dynamic<Vec<SkeletalBone>>

Implementations§

source§

impl EditingSkeleton

source

pub(crate) fn find_bone(&self, id: BoneId) -> Option<SkeletalBone>

source

pub(crate) fn find_bone_in( + bones: &Dynamic<Vec<SkeletalBone>>, + index: usize, +) -> ControlFlow<SkeletalBone, usize>

source

pub(crate) fn find_joint(&self, id: JointId) -> Option<SkeletalBone>

source

pub(crate) fn find_joint_in( + bones: &Dynamic<Vec<SkeletalBone>>, + index: usize, +) -> ControlFlow<SkeletalBone, usize>

Trait Implementations§

source§

impl Clone for EditingSkeleton

source§

fn clone(&self) -> EditingSkeleton

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for EditingSkeleton

source§

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

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

impl Default for EditingSkeleton

source§

fn default() -> EditingSkeleton

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

impl PartialEq for EditingSkeleton

source§

fn eq(&self, other: &EditingSkeleton) -> 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.
source§

impl StructuralPartialEq for EditingSkeleton

Auto Trait Implementations§

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.
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, 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<A> Cast for A

§

fn cast<To>(self) -> To
where + To: CastFrom<A>,

Casts self to the To type. This may be a lossy operation.
§

impl<A> CastFrom<A> for A

§

fn from_cast(from: A) -> A

Returns from as Self.
§

impl<A, B> CastInto<A> for B
where + A: CastFrom<B>,

§

fn cast_into(self) -> A

Returns self as To.
source§

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

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
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<T> for T

§

fn downcast(&self) -> &T

§

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.
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.
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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<R, P> ReadPrimitive<R> for P
where + R: Read + ReadEndian<P>, + P: Default,

source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
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, 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<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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> WasmNotSend for T
where + T: Send,

§

impl<T> WasmNotSendSync for T
where + T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where + T: Sync,

\ No newline at end of file diff --git a/main/FunnyBones/struct.SkeletalBone.html b/main/FunnyBones/struct.SkeletalBone.html new file mode 100644 index 0000000..26b9497 --- /dev/null +++ b/main/FunnyBones/struct.SkeletalBone.html @@ -0,0 +1,80 @@ +SkeletalBone in FunnyBones - Rust

Struct FunnyBones::SkeletalBone

source ·
pub(crate) struct SkeletalBone {
+    pub(crate) label: Dynamic<String>,
+    pub(crate) joint_label: Dynamic<String>,
+    pub(crate) joint_angle: Dynamic<Angle>,
+    pub(crate) length: Dynamic<f32>,
+    pub(crate) jointed: Dynamic<Option<f32>>,
+    pub(crate) inverse: Dynamic<bool>,
+    pub(crate) desired_end: Dynamic<Option<Vector>>,
+    pub(crate) connected_bones: Dynamic<Vec<SkeletalBone>>,
+}

Fields§

§label: Dynamic<String>§joint_label: Dynamic<String>§joint_angle: Dynamic<Angle>§length: Dynamic<f32>§jointed: Dynamic<Option<f32>>§inverse: Dynamic<bool>§desired_end: Dynamic<Option<Vector>>§connected_bones: Dynamic<Vec<SkeletalBone>>

Implementations§

Trait Implementations§

source§

impl Clone for SkeletalBone

source§

fn clone(&self) -> SkeletalBone

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for SkeletalBone

source§

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

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

impl Default for SkeletalBone

source§

fn default() -> Self

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

impl PartialEq for SkeletalBone

source§

fn eq(&self, other: &SkeletalBone) -> 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.
source§

impl StructuralPartialEq for SkeletalBone

Auto Trait Implementations§

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.
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, 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<A> Cast for A

§

fn cast<To>(self) -> To
where + To: CastFrom<A>,

Casts self to the To type. This may be a lossy operation.
§

impl<A> CastFrom<A> for A

§

fn from_cast(from: A) -> A

Returns from as Self.
§

impl<A, B> CastInto<A> for B
where + A: CastFrom<B>,

§

fn cast_into(self) -> A

Returns self as To.
source§

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

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
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<T> for T

§

fn downcast(&self) -> &T

§

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.
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.
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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<R, P> ReadPrimitive<R> for P
where + R: Read + ReadEndian<P>, + P: Default,

source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
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, 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<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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> WasmNotSend for T
where + T: Send,

§

impl<T> WasmNotSendSync for T
where + T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where + T: Sync,

\ No newline at end of file diff --git a/main/crates.js b/main/crates.js index d490839..cf95c87 100644 --- a/main/crates.js +++ b/main/crates.js @@ -1 +1,2 @@ -window.ALL_CRATES = ["funnybones"]; \ No newline at end of file +window.ALL_CRATES = ["FunnyBones","funnybones"]; +//{"start":21,"fragment_lengths":[12,13]} \ No newline at end of file diff --git a/main/funnybones/all.html b/main/funnybones/all.html index f61cdbe..467df66 100644 --- a/main/funnybones/all.html +++ b/main/funnybones/all.html @@ -1 +1 @@ -List of all items in this crate

List of all items

Structs

Enums

\ No newline at end of file +List of all items in this crate

List of all items

Structs

Enums

\ No newline at end of file diff --git a/main/funnybones/animation/enum.ChangeKind.html b/main/funnybones/animation/enum.ChangeKind.html index c32a5da..9f59b9a 100644 --- a/main/funnybones/animation/enum.ChangeKind.html +++ b/main/funnybones/animation/enum.ChangeKind.html @@ -1,16 +1,16 @@ -ChangeKind in funnybones::animation - Rust

Enum funnybones::animation::ChangeKind

source ·
pub enum ChangeKind {
+ChangeKind in funnybones::animation - Rust

Enum funnybones::animation::ChangeKind

source ·
pub enum ChangeKind {
     Bone {
         bone: BoneId,
         position: Vector,
     },
     Joint {
         joint: JointId,
-        rotation: Rotation,
+        rotation: Angle,
     },
-}

Variants§

§

Bone

Fields

§bone: BoneId
§position: Vector
§

Joint

Fields

§joint: JointId
§rotation: Rotation

Implementations§

source§

impl ChangeKind

source

pub const fn with_easing(self, easing: StandardEasing) -> Change

Trait Implementations§

source§

impl Clone for ChangeKind

source§

fn clone(&self) -> ChangeKind

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for ChangeKind

source§

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

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

impl<'de> Deserialize<'de> for ChangeKind

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 From<ChangeKind> for Change

source§

fn from(kind: ChangeKind) -> Self

Converts to this type from the input type.
source§

impl PartialEq for ChangeKind

source§

fn eq(&self, other: &ChangeKind) -> 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.
source§

impl Serialize for ChangeKind

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for ChangeKind

source§

impl StructuralPartialEq for ChangeKind

Auto Trait Implementations§

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +}

Variants§

§

Bone

Fields

§bone: BoneId
§position: Vector
§

Joint

Fields

§joint: JointId
§rotation: Angle

Implementations§

source§

impl ChangeKind

source

pub const fn with_easing(self, easing: StandardEasing) -> Change

Trait Implementations§

source§

impl Clone for ChangeKind

source§

fn clone(&self) -> ChangeKind

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for ChangeKind

source§

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

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

impl<'de> Deserialize<'de> for ChangeKind

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 From<ChangeKind> for Change

source§

fn from(kind: ChangeKind) -> Self

Converts to this type from the input type.
source§

impl PartialEq for ChangeKind

source§

fn eq(&self, other: &ChangeKind) -> 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.
source§

impl Serialize for ChangeKind

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for ChangeKind

source§

impl StructuralPartialEq for ChangeKind

Auto Trait Implementations§

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>, @@ -23,7 +23,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -36,7 +36,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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.
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, @@ -48,7 +48,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -65,11 +65,11 @@ Converts self into a Right variant of Either<Self, Self> otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

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, C> TryComponentsInto<C> for T
where - C: TryFromComponents<T>,

§

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 + 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, 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>,

§

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>,

§

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: 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 @@ -77,8 +77,8 @@ C: FromUints<U>,

source§

fn uints_into(self) -> C

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

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where +[WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

\ No newline at end of file diff --git a/main/funnybones/animation/index.html b/main/funnybones/animation/index.html index 5439402..8f09d0a 100644 --- a/main/funnybones/animation/index.html +++ b/main/funnybones/animation/index.html @@ -1 +1 @@ -funnybones::animation - Rust
\ No newline at end of file +funnybones::animation - Rust
\ No newline at end of file diff --git a/main/funnybones/animation/struct.Animation.html b/main/funnybones/animation/struct.Animation.html index c487d30..91ed3e7 100644 --- a/main/funnybones/animation/struct.Animation.html +++ b/main/funnybones/animation/struct.Animation.html @@ -1,5 +1,5 @@ -Animation in funnybones::animation - Rust

Struct funnybones::animation::Animation

source ·
pub struct Animation(/* private fields */);

Implementations§

source§

impl Animation

source

pub fn push(&mut self, frame: Frame)

source

pub fn with(self, frame: Frame) -> Self

source

pub fn remove(&mut self, frame_index: usize) -> Frame

source

pub fn insert(&mut self, index: usize, frame: Frame)

source

pub fn with_variable(self, name: impl Into<String>, value: f32) -> Self

source

pub fn set_variable<'a>(&mut self, name: impl Into<Cow<'a, str>>, value: f32)

source

pub fn variable(&self, name: &str) -> Option<f32>

source

pub fn start(&self) -> RunningAnimation

Methods from Deref<Target = [Frame]>§

source

pub fn as_str(&self) -> &str

🔬This is a nightly-only experimental API. (ascii_char)

Views this slice of ASCII characters as a UTF-8 str.

-
source

pub fn as_bytes(&self) -> &[u8]

🔬This is a nightly-only experimental API. (ascii_char)

Views this slice of ASCII characters as a slice of u8 bytes.

+Animation in funnybones::animation - Rust

Struct funnybones::animation::Animation

source ·
pub struct Animation(/* private fields */);

Implementations§

source§

impl Animation

source

pub fn push(&mut self, frame: Frame)

source

pub fn with(self, frame: Frame) -> Self

source

pub fn remove(&mut self, frame_index: usize) -> Frame

source

pub fn insert(&mut self, index: usize, frame: Frame)

source

pub fn with_variable(self, name: impl Into<String>, value: f32) -> Self

source

pub fn set_variable<'a>(&mut self, name: impl Into<Cow<'a, str>>, value: f32)

source

pub fn variable(&self, name: &str) -> Option<f32>

source

pub fn start(&self) -> RunningAnimation

Methods from Deref<Target = [Frame]>§

source

pub fn as_str(&self) -> &str

🔬This is a nightly-only experimental API. (ascii_char)

Views this slice of ASCII characters as a UTF-8 str.

+
source

pub fn as_bytes(&self) -> &[u8]

🔬This is a nightly-only experimental API. (ascii_char)

Views this slice of ASCII characters as a slice of u8 bytes.

1.23.0 · source

pub fn is_ascii(&self) -> bool

Checks if all bytes in this slice are within the ASCII range.

source

pub fn as_ascii(&self) -> Option<&[AsciiChar]>

🔬This is a nightly-only experimental API. (ascii_char)

If this slice is_ascii, returns it as a slice of ASCII characters, otherwise returns None.

@@ -2452,8 +2452,8 @@
§Examples<

ASCII letters ‘A’ to ‘Z’ are mapped to ‘a’ to ‘z’, but non-ASCII letters are unchanged.

To lowercase the value in-place, use make_ascii_lowercase.

-

Trait Implementations§

source§

impl Clone for Animation

source§

fn clone(&self) -> Animation

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Animation

source§

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

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

impl Default for Animation

source§

fn default() -> Animation

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

impl Deref for Animation

§

type Target = [Frame]

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl DerefMut for Animation

source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
source§

impl PartialEq for Animation

source§

fn eq(&self, other: &Animation) -> 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.
source§

impl StructuralPartialEq for Animation

Auto Trait Implementations§

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +

Trait Implementations§

source§

impl Clone for Animation

source§

fn clone(&self) -> Animation

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Animation

source§

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

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

impl Default for Animation

source§

fn default() -> Animation

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

impl Deref for Animation

source§

type Target = [Frame]

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl DerefMut for Animation

source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
source§

impl PartialEq for Animation

source§

fn eq(&self, other: &Animation) -> 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.
source§

impl StructuralPartialEq for Animation

Auto Trait Implementations§

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>, @@ -2466,7 +2466,7 @@
§Examples< 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -2479,7 +2479,7 @@
§Examples< 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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.
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, @@ -2491,7 +2491,7 @@
§Examples< 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -2507,11 +2507,11 @@
§Examples< rounding and clamping.

§

impl<T> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
source§

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

§

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, C> TryComponentsInto<C> for T
where - C: TryFromComponents<T>,

§

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 + 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, 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>,

§

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>,

§

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: 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 diff --git a/main/funnybones/animation/struct.Change.html b/main/funnybones/animation/struct.Change.html index d724c06..ae8fb9c 100644 --- a/main/funnybones/animation/struct.Change.html +++ b/main/funnybones/animation/struct.Change.html @@ -1,7 +1,7 @@ -Change in funnybones::animation - Rust

Struct funnybones::animation::Change

source ·
pub struct Change { /* private fields */ }

Trait Implementations§

source§

impl Clone for Change

source§

fn clone(&self) -> Change

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Change

source§

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

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

impl<'de> Deserialize<'de> for Change

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 From<ChangeKind> for Change

source§

fn from(kind: ChangeKind) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Change

source§

fn eq(&self, other: &Change) -> 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.
source§

impl Serialize for Change

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Change

source§

impl StructuralPartialEq for Change

Auto Trait Implementations§

§

impl Freeze for Change

§

impl RefUnwindSafe for Change

§

impl Send for Change

§

impl Sync for Change

§

impl Unpin for Change

§

impl UnwindSafe for Change

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +Change in funnybones::animation - Rust

Struct funnybones::animation::Change

source ·
pub struct Change { /* private fields */ }

Trait Implementations§

source§

impl Clone for Change

source§

fn clone(&self) -> Change

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Change

source§

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

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

impl<'de> Deserialize<'de> for Change

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 From<ChangeKind> for Change

source§

fn from(kind: ChangeKind) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Change

source§

fn eq(&self, other: &Change) -> 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.
source§

impl Serialize for Change

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Change

source§

impl StructuralPartialEq for Change

Auto Trait Implementations§

§

impl Freeze for Change

§

impl RefUnwindSafe for Change

§

impl Send for Change

§

impl Sync for Change

§

impl Unpin for Change

§

impl UnwindSafe for Change

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>, @@ -14,7 +14,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -27,7 +27,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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.
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, @@ -39,7 +39,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -56,11 +56,11 @@ Converts self into a Right variant of Either<Self, Self> otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

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, C> TryComponentsInto<C> for T
where - C: TryFromComponents<T>,

§

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 + 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, 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>,

§

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>,

§

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: 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 @@ -68,8 +68,8 @@ C: FromUints<U>,

source§

fn uints_into(self) -> C

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

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where +[WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

\ No newline at end of file diff --git a/main/funnybones/animation/struct.Frame.html b/main/funnybones/animation/struct.Frame.html index 318fb21..c551305 100644 --- a/main/funnybones/animation/struct.Frame.html +++ b/main/funnybones/animation/struct.Frame.html @@ -1,5 +1,5 @@ -Frame in funnybones::animation - Rust

Struct funnybones::animation::Frame

source ·
pub struct Frame { /* private fields */ }

Implementations§

source§

impl Frame

source

pub const fn new(duration: Duration) -> Self

source

pub fn set_duration(&mut self, duration: Duration)

source

pub const fn duration(&self) -> Duration

source

pub fn with_change(self, change: impl Into<Change>) -> Self

source

pub fn push_change(&mut self, change: impl Into<Change>)

Methods from Deref<Target = [Change]>§

source

pub fn as_str(&self) -> &str

🔬This is a nightly-only experimental API. (ascii_char)

Views this slice of ASCII characters as a UTF-8 str.

-
source

pub fn as_bytes(&self) -> &[u8]

🔬This is a nightly-only experimental API. (ascii_char)

Views this slice of ASCII characters as a slice of u8 bytes.

+Frame in funnybones::animation - Rust

Struct funnybones::animation::Frame

source ·
pub struct Frame { /* private fields */ }

Implementations§

source§

impl Frame

source

pub const fn new(duration: Duration) -> Self

source

pub fn set_duration(&mut self, duration: Duration)

source

pub const fn duration(&self) -> Duration

source

pub fn with_change(self, change: impl Into<Change>) -> Self

source

pub fn push_change(&mut self, change: impl Into<Change>)

Methods from Deref<Target = [Change]>§

source

pub fn as_str(&self) -> &str

🔬This is a nightly-only experimental API. (ascii_char)

Views this slice of ASCII characters as a UTF-8 str.

+
source

pub fn as_bytes(&self) -> &[u8]

🔬This is a nightly-only experimental API. (ascii_char)

Views this slice of ASCII characters as a slice of u8 bytes.

1.23.0 · source

pub fn is_ascii(&self) -> bool

Checks if all bytes in this slice are within the ASCII range.

source

pub fn as_ascii(&self) -> Option<&[AsciiChar]>

🔬This is a nightly-only experimental API. (ascii_char)

If this slice is_ascii, returns it as a slice of ASCII characters, otherwise returns None.

@@ -2452,10 +2452,10 @@
§Examples<

ASCII letters ‘A’ to ‘Z’ are mapped to ‘a’ to ‘z’, but non-ASCII letters are unchanged.

To lowercase the value in-place, use make_ascii_lowercase.

-

Trait Implementations§

source§

impl Clone for Frame

source§

fn clone(&self) -> Frame

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Frame

source§

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

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

impl Deref for Frame

§

type Target = [Change]

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl DerefMut for Frame

source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
source§

impl<'de> Deserialize<'de> for Frame

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 PartialEq for Frame

source§

fn eq(&self, other: &Frame) -> 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.
source§

impl Serialize for Frame

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for Frame

Auto Trait Implementations§

§

impl Freeze for Frame

§

impl RefUnwindSafe for Frame

§

impl Send for Frame

§

impl Sync for Frame

§

impl Unpin for Frame

§

impl UnwindSafe for Frame

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +

Trait Implementations§

source§

impl Clone for Frame

source§

fn clone(&self) -> Frame

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Frame

source§

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

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

impl Deref for Frame

source§

type Target = [Change]

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl DerefMut for Frame

source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
source§

impl<'de> Deserialize<'de> for Frame

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 PartialEq for Frame

source§

fn eq(&self, other: &Frame) -> 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.
source§

impl Serialize for Frame

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for Frame

Auto Trait Implementations§

§

impl Freeze for Frame

§

impl RefUnwindSafe for Frame

§

impl Send for Frame

§

impl Sync for Frame

§

impl Unpin for Frame

§

impl UnwindSafe for Frame

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>, @@ -2468,7 +2468,7 @@
§Examples< 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -2481,7 +2481,7 @@
§Examples< 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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.
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, @@ -2493,7 +2493,7 @@
§Examples< 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -2507,11 +2507,11 @@
§Examples< Converts self into a Right variant of Either<Self, Self> otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

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, C> TryComponentsInto<C> for T
where - C: TryFromComponents<T>,

§

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 + 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, 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>,

§

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>,

§

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: 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 @@ -2519,8 +2519,8 @@
§Examples< C: FromUints<U>,

source§

fn uints_into(self) -> C

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

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where +[WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

\ No newline at end of file diff --git a/main/funnybones/animation/struct.RunningAnimation.html b/main/funnybones/animation/struct.RunningAnimation.html index 92e33f7..4095959 100644 --- a/main/funnybones/animation/struct.RunningAnimation.html +++ b/main/funnybones/animation/struct.RunningAnimation.html @@ -1,4 +1,4 @@ -RunningAnimation in funnybones::animation - Rust

Struct funnybones::animation::RunningAnimation

source ·
pub struct RunningAnimation { /* private fields */ }

Implementations§

source§

impl RunningAnimation

source

pub fn looping(self) -> Self

source

pub fn update(&mut self, elapsed: Duration, skeleton: &mut Skeleton) -> bool

Auto Trait Implementations§

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +RunningAnimation in funnybones::animation - Rust

Struct funnybones::animation::RunningAnimation

source ·
pub struct RunningAnimation { /* private fields */ }

Implementations§

source§

impl RunningAnimation

source

pub fn looping(self) -> Self

source

pub fn update(&mut self, elapsed: Duration, skeleton: &mut Skeleton) -> bool

Auto Trait Implementations§

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>, @@ -11,7 +11,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -23,7 +23,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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.
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, @@ -35,7 +35,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -49,10 +49,10 @@ Converts self into a Right variant of Either<Self, Self> otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

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 + 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>,

§

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>,

§

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: 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 diff --git a/main/funnybones/cushy/index.html b/main/funnybones/cushy/index.html new file mode 100644 index 0000000..ee6337d --- /dev/null +++ b/main/funnybones/cushy/index.html @@ -0,0 +1,2 @@ +funnybones::cushy - Rust

Module funnybones::cushy

source ·
Expand description

Widgets for editing and rendering skeletons.

+

Modules§

\ No newline at end of file diff --git a/main/funnybones/cushy/sidebar-items.js b/main/funnybones/cushy/sidebar-items.js new file mode 100644 index 0000000..5d9f7df --- /dev/null +++ b/main/funnybones/cushy/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"mod":["skeleton_canvas"]}; \ No newline at end of file diff --git a/main/funnybones/cushy/skeleton_canvas/enum.SkeletonMutation.html b/main/funnybones/cushy/skeleton_canvas/enum.SkeletonMutation.html new file mode 100644 index 0000000..19324b5 --- /dev/null +++ b/main/funnybones/cushy/skeleton_canvas/enum.SkeletonMutation.html @@ -0,0 +1,81 @@ +SkeletonMutation in funnybones::cushy::skeleton_canvas - Rust
pub enum SkeletonMutation {
+    SetDesiredEnd {
+        bone: BoneId,
+        end: Vector,
+    },
+    SetJointRotation {
+        joint: JointId,
+        rotation: Angle,
+    },
+}

Variants§

§

SetDesiredEnd

Fields

§bone: BoneId
§

SetJointRotation

Fields

§joint: JointId
§rotation: Angle

Trait Implementations§

source§

impl Clone for SkeletonMutation

source§

fn clone(&self) -> SkeletonMutation

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for SkeletonMutation

source§

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

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

impl PartialEq for SkeletonMutation

source§

fn eq(&self, other: &SkeletonMutation) -> 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.
source§

impl Copy for SkeletonMutation

source§

impl StructuralPartialEq for SkeletonMutation

Auto Trait Implementations§

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.
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, 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<A> Cast for A

§

fn cast<To>(self) -> To
where + To: CastFrom<A>,

Casts self to the To type. This may be a lossy operation.
§

impl<A> CastFrom<A> for A

§

fn from_cast(from: A) -> A

Returns from as Self.
§

impl<A, B> CastInto<A> for B
where + A: CastFrom<B>,

§

fn cast_into(self) -> A

Returns self as To.
source§

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

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
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<T> for T

§

fn downcast(&self) -> &T

§

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

impl<Unit> IntoComponents<Unit> for Unit
where + Unit: Copy,

§

fn into_components(self) -> (Unit, Unit)

Extracts this type’s 2d vector components.
§

fn to_vec<Type>(self) -> Type
where + Type: FromComponents<Unit>,

Converts this type to another type using [FromComponents] and +[IntoComponents].
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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, 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<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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> WasmNotSend for T
where + T: Send,

§

impl<T> WasmNotSendSync for T
where + T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where + T: Sync,

\ No newline at end of file diff --git a/main/funnybones/cushy/skeleton_canvas/enum.Target.html b/main/funnybones/cushy/skeleton_canvas/enum.Target.html new file mode 100644 index 0000000..1d1a3dc --- /dev/null +++ b/main/funnybones/cushy/skeleton_canvas/enum.Target.html @@ -0,0 +1,79 @@ +Target in funnybones::cushy::skeleton_canvas - Rust

Enum funnybones::cushy::skeleton_canvas::Target

source ·
pub enum Target {
+    Joint(JointId),
+    DesiredEnd(BoneId),
+}

Variants§

§

Joint(JointId)

§

DesiredEnd(BoneId)

Trait Implementations§

source§

impl Clone for Target

source§

fn clone(&self) -> Target

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Target

source§

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

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

impl PartialEq for Target

source§

fn eq(&self, other: &Target) -> 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.
source§

impl Copy for Target

source§

impl Eq for Target

source§

impl StructuralPartialEq for Target

Auto Trait Implementations§

§

impl Freeze for Target

§

impl RefUnwindSafe for Target

§

impl Send for Target

§

impl Sync for Target

§

impl Unpin for Target

§

impl UnwindSafe for Target

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.
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, 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<A> Cast for A

§

fn cast<To>(self) -> To
where + To: CastFrom<A>,

Casts self to the To type. This may be a lossy operation.
§

impl<A> CastFrom<A> for A

§

fn from_cast(from: A) -> A

Returns from as Self.
§

impl<A, B> CastInto<A> for B
where + A: CastFrom<B>,

§

fn cast_into(self) -> A

Returns self as To.
source§

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

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
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<T> for T

§

fn downcast(&self) -> &T

§

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

Compare self to key and return true if they are equal.
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.
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
§

impl<Unit> IntoComponents<Unit> for Unit
where + Unit: Copy,

§

fn into_components(self) -> (Unit, Unit)

Extracts this type’s 2d vector components.
§

fn to_vec<Type>(self) -> Type
where + Type: FromComponents<Unit>,

Converts this type to another type using [FromComponents] and +[IntoComponents].
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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, 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<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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> WasmNotSend for T
where + T: Send,

§

impl<T> WasmNotSendSync for T
where + T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where + T: Sync,

\ No newline at end of file diff --git a/main/funnybones/cushy/skeleton_canvas/index.html b/main/funnybones/cushy/skeleton_canvas/index.html new file mode 100644 index 0000000..b900700 --- /dev/null +++ b/main/funnybones/cushy/skeleton_canvas/index.html @@ -0,0 +1 @@ +funnybones::cushy::skeleton_canvas - Rust
\ No newline at end of file diff --git a/main/funnybones/cushy/skeleton_canvas/sidebar-items.js b/main/funnybones/cushy/skeleton_canvas/sidebar-items.js new file mode 100644 index 0000000..f070b11 --- /dev/null +++ b/main/funnybones/cushy/skeleton_canvas/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["SkeletonMutation","Target"],"struct":["SkeletonCanvas"]}; \ No newline at end of file diff --git a/main/funnybones/cushy/skeleton_canvas/struct.SkeletonCanvas.html b/main/funnybones/cushy/skeleton_canvas/struct.SkeletonCanvas.html new file mode 100644 index 0000000..a06272d --- /dev/null +++ b/main/funnybones/cushy/skeleton_canvas/struct.SkeletonCanvas.html @@ -0,0 +1,168 @@ +SkeletonCanvas in funnybones::cushy::skeleton_canvas - Rust

Struct funnybones::cushy::skeleton_canvas::SkeletonCanvas

source ·
pub struct SkeletonCanvas { /* private fields */ }

Implementations§

source§

impl SkeletonCanvas

source

pub fn new(skeleton: Dynamic<Skeleton>) -> Self

source

pub fn on_mutate<F>(self, on_mutate: F) -> Self
where + F: FnMut(SkeletonMutation) + Send + 'static,

Trait Implementations§

source§

impl Debug for SkeletonCanvas

source§

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

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

impl Widget for SkeletonCanvas

source§

fn redraw(&mut self, context: &mut GraphicsContext<'_, '_, '_, '_>)

Redraw the contents of this widget.
source§

fn layout( + &mut self, + available_space: Size<ConstraintLimit>, + _context: &mut LayoutContext<'_, '_, '_, '_>, +) -> Size<UPx>

Layout this widget and returns the ideal size based on its contents and +the available_space.
source§

fn hover( + &mut self, + location: Point<Px>, + context: &mut EventContext<'_>, +) -> Option<CursorIcon>

The widget is currently has a cursor hovering it at location.
source§

fn unhover(&mut self, context: &mut EventContext<'_>)

The widget is no longer being hovered.
source§

fn mouse_down( + &mut self, + location: Point<Px>, + _device_id: DeviceId, + _button: MouseButton, + _context: &mut EventContext<'_>, +) -> EventHandling

A mouse button event has occurred at location. Returns whether the +event has been handled or not. Read more
source§

fn mouse_drag( + &mut self, + location: Point<Px>, + _device_id: DeviceId, + _button: MouseButton, + _context: &mut EventContext<'_>, +)

A mouse button is being held down as the cursor is moved across the +widget.
source§

fn mouse_up( + &mut self, + _location: Option<Point<Px>>, + _device_id: DeviceId, + _button: MouseButton, + _context: &mut EventContext<'_>, +)

A mouse button is no longer being pressed.
source§

fn hit_test( + &mut self, + _location: Point<Px>, + _context: &mut EventContext<'_>, +) -> bool

Returns true if this widget should respond to mouse input at location.
§

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

Writes a summary of this widget into fmt. Read more
§

fn full_control_redraw(&self) -> bool

Returns true if this widget handles all built-in style components that +apply. Read more
§

fn mounted(&mut self, context: &mut EventContext<'_>)

The widget has been mounted into a parent widget. Read more
§

fn unmounted(&mut self, context: &mut EventContext<'_>)

The widget has been removed from its parent widget.
§

fn accept_focus(&mut self, context: &mut EventContext<'_>) -> bool

This widget has been targeted to be focused. If this function returns +true, the widget will be focused. If false, Cushy will continue +searching for another focus target.
§

fn focus(&mut self, context: &mut EventContext<'_>)

The widget has received focus for user input.
§

fn advance_focus( + &mut self, + direction: VisualOrder, + context: &mut EventContext<'_>, +) -> ControlFlow<EventHandled, EventIgnored>

The widget should switch to the next focusable area within this widget, +honoring direction in a consistent manner. Returning HANDLED will +cause the search for the next focus widget stop.
§

fn allow_blur(&mut self, context: &mut EventContext<'_>) -> bool

The widget is about to lose focus. Returning true allows the focus to +switch away from this widget.
§

fn blur(&mut self, context: &mut EventContext<'_>)

The widget is no longer focused for user input.
§

fn activate(&mut self, context: &mut EventContext<'_>)

The widget has become the active widget.
§

fn deactivate(&mut self, context: &mut EventContext<'_>)

The widget is no longer active.
§

fn keyboard_input( + &mut self, + device_id: DeviceId, + input: KeyEvent, + is_synthetic: bool, + context: &mut EventContext<'_>, +) -> ControlFlow<EventHandled, EventIgnored>

A keyboard event has been sent to this widget. Returns whether the event +has been handled or not.
§

fn ime( + &mut self, + ime: Ime, + context: &mut EventContext<'_>, +) -> ControlFlow<EventHandled, EventIgnored>

An input manager event has been sent to this widget. Returns whether the +event has been handled or not.
§

fn mouse_wheel( + &mut self, + device_id: DeviceId, + delta: MouseScrollDelta, + phase: TouchPhase, + context: &mut EventContext<'_>, +) -> ControlFlow<EventHandled, EventIgnored>

A mouse wheel event has been sent to this widget. Returns whether the +event has been handled or not.
§

fn root_behavior( + &mut self, + context: &mut EventContext<'_>, +) -> Option<(RootBehavior, WidgetInstance)>

Returns a reference to a single child widget if this widget is a widget +that primarily wraps a single other widget to customize its behavior.

Auto Trait Implementations§

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.
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, 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<A> Cast for A

§

fn cast<To>(self) -> To
where + To: CastFrom<A>,

Casts self to the To type. This may be a lossy operation.
§

impl<A> CastFrom<A> for A

§

fn from_cast(from: A) -> A

Returns from as Self.
§

impl<A, B> CastInto<A> for B
where + A: CastFrom<B>,

§

fn cast_into(self) -> A

Returns self as To.
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<T> for T

§

fn downcast(&self) -> &T

§

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.
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.
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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> MakeWidget for T
where + T: MakeWidgetWithTag,

§

fn make_widget(self) -> WidgetInstance

Returns a new widget.
§

fn into_window(self) -> Window

Returns a new window containing self as the root widget.
§

fn build_standalone_window(self) -> StandaloneWindowBuilder

Returns a builder for a standalone window. Read more
§

fn build_recorder(self) -> VirtualRecorderBuilder<Rgb8>

Returns a builder for a VirtualRecorder
§

fn with_styles(self, styles: impl IntoValue<Styles>) -> Style
where + Self: Sized,

Associates styles with this widget. Read more
§

fn with<C>( + self, + name: &C, + component: impl IntoValue<<C as ComponentDefinition>::ComponentType>, +) -> Style
where + C: ComponentDefinition, + Value<<C as ComponentDefinition>::ComponentType>: IntoComponentValue,

Associates a style component with self.
§

fn with_dynamic<C>( + self, + name: &C, + dynamic: impl IntoDynamicComponentValue, +) -> Style
where + C: ComponentDefinition, + Value<<C as ComponentDefinition>::ComponentType>: IntoComponentValue,

Associates a style component with self, resolving its value using +dynamic at runtime.
§

fn h1(self) -> Style

Styles self with the largest of 6 heading styles.
§

fn h2(self) -> Style

Styles self with the second largest of 6 heading styles.
§

fn h3(self) -> Style

Styles self with the third largest of 6 heading styles.
§

fn h4(self) -> Style

Styles self with the third smallest of 6 heading styles.
§

fn h5(self) -> Style

Styles self with the second smallest of 6 heading styles.
§

fn h6(self) -> Style

Styles self with the smallest of 6 heading styles.
§

fn xxxx_large(self) -> Style

Styles self with the largest text size.
§

fn xxx_large(self) -> Style

Styles self with the second largest text size.
§

fn xx_large(self) -> Style

Styles self with the third largest text size.
§

fn x_large(self) -> Style

Styles self with the fourth largest text size.
§

fn large(self) -> Style

Styles self with the fifth largest text size.
§

fn default_size(self) -> Style

Styles self with the third smallest text size.
§

fn small(self) -> Style

Styles self with the second smallest text size.
§

fn x_small(self) -> Style

Styles self with the smallest text size.
§

fn with_next_focus( + self, + next_focus: impl IntoValue<Option<WidgetId>>, +) -> WidgetInstance

Sets the widget that should be focused next. Read more
§

fn with_enabled(self, enabled: impl IntoValue<bool>) -> WidgetInstance

Sets this widget to be enabled/disabled based on enabled and returns +self. Read more
§

fn into_default(self) -> WidgetInstance

Sets this widget as a “default” widget. Read more
§

fn into_escape(self) -> WidgetInstance

Sets this widget as an “escape” widget. Read more
§

fn and(self, other: impl MakeWidget) -> WidgetList

Returns a collection of widgets using self and other.
§

fn chain<W>(self, others: impl IntoIterator<Item = W>) -> WidgetList
where + W: MakeWidget,

Chains self and others into a [WidgetList].
§

fn expand(self) -> Expand

Expands self to grow to fill its parent.
§

fn expand_weighted(self, weight: u8) -> Expand

Expands self to grow to fill its parent proportionally with other +weighted siblings.
§

fn expand_horizontally(self) -> Expand

Expands self to grow to fill its parent horizontally.
§

fn expand_vertically(self) -> Expand

Expands self to grow to fill its parent vertically.
§

fn size<T>(self, size: Size<T>) -> Resize
where + T: Into<DimensionRange>,

Resizes self to size.
§

fn width(self, width: impl Into<DimensionRange>) -> Resize

Resizes self to width. Read more
§

fn height(self, height: impl Into<DimensionRange>) -> Resize

Resizes self to height. Read more
§

fn into_button(self) -> Button

Returns this widget as the contents of a clickable button.
§

fn to_button(&self) -> Button
where + Self: Clone,

Returns this widget as the contents of a clickable button.
§

fn into_checkbox(self, value: impl IntoDynamic<CheckboxState>) -> Checkbox

Returns this widget as the label of a Checkbox.
§

fn to_checkbox(&self, value: impl IntoDynamic<CheckboxState>) -> Checkbox
where + Self: Clone,

Returns this widget as the label of a Checkbox.
§

fn centered(self) -> Align

Aligns self to the center vertically and horizontally.
§

fn align_left(self) -> Align

Aligns self to the left.
§

fn align_right(self) -> Align

Aligns self to the right.
§

fn align_top(self) -> Align

Aligns self to the top.
§

fn align_bottom(self) -> Align

Aligns self to the bottom.
§

fn fit_horizontally(self) -> Align

Fits self horizontally within its parent.
§

fn fit_vertically(self) -> Align

Fits self vertically within its parent.
§

fn scroll(self) -> Scroll

Allows scrolling self both vertically and horizontally.
§

fn vertical_scroll(self) -> Scroll

Allows scrolling self vertically.
§

fn horizontal_scroll(self) -> Scroll

Allows scrolling self horizontally.
§

fn widget_ref(self) -> WidgetRef

Creates a [WidgetRef] for use as child widget.
§

fn contain(self) -> Container

Wraps self in a [Container].
§

fn contain_level(self, level: impl IntoValue<ContainerLevel>) -> Container

Wraps self in a [Container] with the specified level.
§

fn background_color(self, color: impl IntoValue<Color>) -> Container

Returns a new widget that renders color behind self.
§

fn pad(self) -> Container

Wraps self with the default padding.
§

fn pad_by(self, padding: impl IntoValue<Edges<Dimension>>) -> Container

Wraps self with the specified padding.
§

fn themed(self, theme: impl IntoValue<ThemePair>) -> Themed

Applies theme to self and its children.
§

fn themed_mode(self, mode: impl IntoValue<ThemeMode>) -> ThemedMode

Applies mode to self and its children.
§

fn collapse_horizontally( + self, + collapse_when: impl IntoDynamic<bool>, +) -> Collapse

Returns a widget that collapses self horizontally based on the dynamic boolean value. Read more
§

fn collapse_vertically(self, collapse_when: impl IntoDynamic<bool>) -> Collapse

Returns a widget that collapses self vertically based on the dynamic +boolean value. Read more
§

fn disclose(self) -> Disclose

Returns a new widget that allows hiding and showing contents.
§

fn validation(self, validation: impl IntoDynamic<Validation>) -> Validated

Returns a widget that shows validation errors and/or hints.
§

fn tooltip(self, layer: &OverlayLayer, tip: impl MakeWidget) -> Tooltipped

Returns a widget that shows tip on layer when self is hovered.
§

impl<T> MakeWidgetWithTag for T
where + T: Widget,

§

fn make_with_tag(self, id: WidgetTag) -> WidgetInstance

Returns a new [WidgetInstance] whose [WidgetId] comes from tag.
§

impl<T> Open for T
where + T: MakeWidget,

§

fn open<App>( + self, + app: &mut App, +) -> Result<Option<WindowHandle>, EventLoopError>
where + App: Application + ?Sized,

Opens the provided type as a window inside of app.
§

fn run_in(self, app: PendingApp) -> Result<(), EventLoopError>

Runs the provided type inside of the pending app, returning Ok(()) +upon successful execution and program exit. Note that this function may +not ever return on some platforms.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> Run for T
where + T: MakeWidget,

§

fn run(self) -> Result<(), EventLoopError>

Runs the provided type, returning Ok(()) upon successful execution and +program exit. Note that this function may not ever return on some +platforms.
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<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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> WasmNotSend for T
where + T: Send,

\ No newline at end of file diff --git a/main/funnybones/enum.BoneEnd.html b/main/funnybones/enum.BoneEnd.html index 39d5861..82cccff 100644 --- a/main/funnybones/enum.BoneEnd.html +++ b/main/funnybones/enum.BoneEnd.html @@ -1,16 +1,16 @@ -BoneEnd in funnybones - Rust

Enum funnybones::BoneEnd

source ·
pub enum BoneEnd {
+BoneEnd in funnybones - Rust

Enum funnybones::BoneEnd

source ·
pub enum BoneEnd {
     A,
     B,
 }
Expand description

A specific end of a Bone.

Variants§

§

A

The first end of a bone.

§

B

The second end of a bone.

-

Implementations§

source§

impl BoneEnd

source

pub const fn inverse(self) -> Self

Returns the opposite end of self.

-

Trait Implementations§

source§

impl Clone for BoneEnd

source§

fn clone(&self) -> BoneEnd

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for BoneEnd

source§

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

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

impl<'de> Deserialize<'de> for BoneEnd

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 Hash for BoneEnd

source§

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

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

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

Implementations§

source§

impl BoneEnd

source

pub const fn inverse(self) -> Self

Returns the opposite end of self.

+

Trait Implementations§

source§

impl Clone for BoneEnd

source§

fn clone(&self) -> BoneEnd

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for BoneEnd

source§

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

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

impl<'de> Deserialize<'de> for BoneEnd

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 Hash for BoneEnd

source§

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

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
source§

impl PartialEq for BoneEnd

source§

fn eq(&self, other: &BoneEnd) -> 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.
source§

impl Serialize for BoneEnd

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for BoneEnd

source§

impl Eq for BoneEnd

source§

impl StructuralPartialEq for BoneEnd

Auto Trait Implementations§

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where + Self: Sized,

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

impl PartialEq for BoneEnd

source§

fn eq(&self, other: &BoneEnd) -> 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.
source§

impl Serialize for BoneEnd

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for BoneEnd

source§

impl Eq for BoneEnd

source§

impl StructuralPartialEq for BoneEnd

Auto Trait Implementations§

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>, @@ -23,7 +23,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -36,7 +36,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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 @@ -52,7 +52,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -69,11 +69,11 @@ Converts self into a Right variant of Either<Self, Self> otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

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, C> TryComponentsInto<C> for T
where - C: TryFromComponents<T>,

§

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 + 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, 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>,

§

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>,

§

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: 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 @@ -81,8 +81,8 @@ C: FromUints<U>,

source§

fn uints_into(self) -> C

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

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where +[WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

\ No newline at end of file diff --git a/main/funnybones/enum.BoneKind.html b/main/funnybones/enum.BoneKind.html index 6181280..cdd520f 100644 --- a/main/funnybones/enum.BoneKind.html +++ b/main/funnybones/enum.BoneKind.html @@ -1,4 +1,4 @@ -BoneKind in funnybones - Rust

Enum funnybones::BoneKind

source ·
pub enum BoneKind {
+BoneKind in funnybones - Rust

Enum funnybones::BoneKind

source ·
pub enum BoneKind {
     Rigid {
         length: f32,
     },
@@ -18,11 +18,12 @@
 skeleton.

§inverse: bool

The bend of the simulated joint always goes in one of two directions. This boolean toggles which direction the bend goes in.

-

Implementations§

source§

impl BoneKind

source

pub fn with_label(self, label: impl Into<String>) -> LabeledBoneKind

Attaches a label to this bone when pushed into a skeleton.

-

Trait Implementations§

source§

impl Clone for BoneKind

source§

fn clone(&self) -> BoneKind

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for BoneKind

source§

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

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

impl<'de> Deserialize<'de> for BoneKind

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 From<BoneKind> for LabeledBoneKind

source§

fn from(kind: BoneKind) -> Self

Converts to this type from the input type.
source§

impl PartialEq for BoneKind

source§

fn eq(&self, other: &BoneKind) -> 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.
source§

impl Serialize for BoneKind

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for BoneKind

source§

impl StructuralPartialEq for BoneKind

Auto Trait Implementations§

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +

Implementations§

source§

impl BoneKind

source

pub fn with_label(self, label: impl Into<String>) -> LabeledBoneKind

Attaches a label to this bone when pushed into a skeleton.

+
source

pub fn full_length(&self) -> f32

Returns the full length of this bone.

+

Trait Implementations§

source§

impl Clone for BoneKind

source§

fn clone(&self) -> BoneKind

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for BoneKind

source§

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

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

impl<'de> Deserialize<'de> for BoneKind

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 From<BoneKind> for LabeledBoneKind

source§

fn from(kind: BoneKind) -> Self

Converts to this type from the input type.
source§

impl PartialEq for BoneKind

source§

fn eq(&self, other: &BoneKind) -> 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.
source§

impl Serialize for BoneKind

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for BoneKind

source§

impl StructuralPartialEq for BoneKind

Auto Trait Implementations§

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>, @@ -35,7 +36,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -48,7 +49,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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.
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, @@ -60,7 +61,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -77,11 +78,11 @@ Converts self into a Right variant of Either<Self, Self> otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

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, C> TryComponentsInto<C> for T
where - C: TryFromComponents<T>,

§

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 + 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, 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>,

§

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>,

§

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: 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 @@ -89,8 +90,8 @@ C: FromUints<U>,

source§

fn uints_into(self) -> C

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

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where +[WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

\ No newline at end of file diff --git a/main/funnybones/index.html b/main/funnybones/index.html index 70d0273..501e49a 100644 --- a/main/funnybones/index.html +++ b/main/funnybones/index.html @@ -1,4 +1,4 @@ -funnybones - Rust

Crate funnybones

source ·
Expand description
+funnybones - Rust

Crate funnybones

source ·
Expand description

FunnyBones is considered experimental and unsupported crate version @@ -81,4 +81,4 @@

MIT License or the Apache License 2.0.

To learn more about contributing, please see CONTRIBUTING.md.

-

Modules§

Structs§

Enums§

\ No newline at end of file +

Modules§

Structs§

Enums§

\ No newline at end of file diff --git a/main/funnybones/sidebar-items.js b/main/funnybones/sidebar-items.js index a7c7cf6..cc49ffd 100644 --- a/main/funnybones/sidebar-items.js +++ b/main/funnybones/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"enum":["BoneEnd","BoneKind"],"mod":["animation"],"struct":["Bone","BoneAxis","BoneId","Joint","JointId","LabeledBoneKind","Rotation","Skeleton","Vector"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["BoneEnd","BoneKind"],"mod":["animation","cushy"],"struct":["Angle","Bone","BoneAxis","BoneId","Coordinate","Joint","JointId","LabeledBoneKind","Skeleton","Vector"]}; \ No newline at end of file diff --git a/main/funnybones/struct.Rotation.html b/main/funnybones/struct.Angle.html similarity index 56% rename from main/funnybones/struct.Rotation.html rename to main/funnybones/struct.Angle.html index 639f15c..a20c29e 100644 --- a/main/funnybones/struct.Rotation.html +++ b/main/funnybones/struct.Angle.html @@ -1,19 +1,23 @@ -Rotation in funnybones - Rust

Struct funnybones::Rotation

source ·
pub struct Rotation { /* private fields */ }
Expand description

A value representing a rotation between no rotation and a full rotation.

-

Implementations§

source§

impl Rotation

source

pub fn radians(radians: f32) -> Self

Returns a rotation representing the given radians.

-
source

pub fn degrees(degrees: f32) -> Self

Returns a rotation representing the given degrees.

-
source

pub fn to_degrees(self) -> f32

Returns this rotation represented in degrees.

+Angle in funnybones - Rust

Struct funnybones::Angle

source ·
pub struct Angle { /* private fields */ }
Expand description

A value representing a direction.

+

Implementations§

source§

impl Angle

source

pub const MIN: Self = _

The minimum rotation represented by this type.

+
source

pub const MAX: Self = _

The maximum rotation represented by this type.

+
source

pub fn radians(radians: f32) -> Self

Returns a rotation representing the given radians.

+
source

pub fn degrees(degrees: f32) -> Self

Returns a rotation representing the given degrees.

+
source

pub fn to_degrees(self) -> f32

Returns this rotation represented in degrees.

This value will always be greater than or equal to 0 and will always be less than 360.0.

-
source

pub const fn to_radians(self) -> f32

Returns this rotation represented in radians.

+
source

pub const fn to_radians(self) -> f32

Returns this rotation represented in radians.

This value will always be greater than or equal to 0 and will always be less than .

-

Trait Implementations§

source§

impl Add for Rotation

§

type Output = Rotation

The resulting type after applying the + operator.
source§

fn add(self, rhs: Self) -> Self::Output

Performs the + operation. Read more
source§

impl Clone for Rotation

source§

fn clone(&self) -> Rotation

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Rotation

source§

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

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

impl Default for Rotation

source§

fn default() -> Self

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

impl<'de> Deserialize<'de> for Rotation

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 Display for Rotation

source§

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

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

impl LinearInterpolate for Rotation

source§

fn lerp(&self, target: &Self, percent: f32) -> Self

Interpolate linearly between self and target using percent.
source§

impl Neg for Rotation

§

type Output = Rotation

The resulting type after applying the - operator.
source§

fn neg(self) -> Self::Output

Performs the unary - operation. Read more
source§

impl PartialEq for Rotation

source§

fn eq(&self, other: &Rotation) -> 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.
source§

impl PartialOrd for Rotation

source§

fn partial_cmp(&self, other: &Rotation) -> 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 +
source

pub fn cos(self) -> f32

Returns the cosine of this angle.

+
source

pub fn sin(self) -> f32

Returns the sine of this angle.

+

Trait Implementations§

source§

impl Add<Angle> for Vector

source§

type Output = Vector

The resulting type after applying the + operator.
source§

fn add(self, rhs: Angle) -> Self::Output

Performs the + operation. Read more
source§

impl Add for Angle

source§

type Output = Angle

The resulting type after applying the + operator.
source§

fn add(self, rhs: Self) -> Self::Output

Performs the + operation. Read more
source§

impl AddAssign for Angle

source§

fn add_assign(&mut self, rhs: Self)

Performs the += operation. Read more
source§

impl Clone for Angle

source§

fn clone(&self) -> Angle

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Angle

source§

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

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

impl Default for Angle

source§

fn default() -> Self

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

impl<'de> Deserialize<'de> for Angle

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 Display for Angle

source§

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

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

impl LinearInterpolate for Angle

source§

fn lerp(&self, target: &Self, percent: f32) -> Self

Interpolate linearly between self and target using percent.
source§

impl Neg for Angle

source§

type Output = Angle

The resulting type after applying the - operator.
source§

fn neg(self) -> Self::Output

Performs the unary - operation. Read more
source§

impl PartialEq for Angle

source§

fn eq(&self, other: &Angle) -> 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.
source§

impl PartialOrd for Angle

source§

fn partial_cmp(&self, other: &Angle) -> 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
source§

impl PercentBetween for Rotation

source§

fn percent_between(&self, min: &Self, max: &Self) -> ZeroToOne

Return the percentage that self is between min and max.
source§

impl Serialize for Rotation

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Sub for Rotation

§

type Output = Rotation

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self::Output

Performs the - operation. Read more
source§

impl Copy for Rotation

source§

impl StructuralPartialEq for Rotation

Auto Trait Implementations§

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +the >= operator. Read more

source§

impl PercentBetween for Angle

source§

fn percent_between(&self, min: &Self, max: &Self) -> ZeroToOne

Return the percentage that self is between min and max.
source§

impl Ranged for Angle

source§

const MIN: Self = Self::MIN

The minimum value for this type.
source§

const MAX: Self = Self::MAX

The maximum value for this type.
source§

impl Serialize for Angle

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Sub<Angle> for Vector

source§

type Output = Vector

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Angle) -> Self::Output

Performs the - operation. Read more
source§

impl Sub for Angle

source§

type Output = Angle

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self::Output

Performs the - operation. Read more
source§

impl SubAssign for Angle

source§

fn sub_assign(&mut self, rhs: Self)

Performs the -= operation. Read more
source§

impl Copy for Angle

source§

impl StructuralPartialEq for Angle

Auto Trait Implementations§

§

impl Freeze for Angle

§

impl RefUnwindSafe for Angle

§

impl Send for Angle

§

impl Sync for Angle

§

impl Unpin for Angle

§

impl UnwindSafe for Angle

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>, @@ -26,7 +30,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -39,7 +43,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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<T> DynamicDisplay for T
where T: Display,

§

fn fmt( &self, @@ -60,7 +64,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -76,23 +80,28 @@ if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<R, P> ReadPrimitive<R> for P
where +rounding and clamping.

§

impl<T> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> ProgressValue for T
where + T: Ranged + PercentBetween + 'static,

§

type Value = T

The type that progress is ranged over.
§

fn to_progress( + &self, + range: Option<RangeInclusive<&<T as ProgressValue>::Value>>, +) -> Progress

Converts this value to a progress using the range given, if provided. If +no range is provided, the full range of the type should be considered.
source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
§

impl<T> SliderValue for T
where - T: Clone + Debug + PartialOrd + LinearInterpolate + PercentBetween + Send + 'static,

§

type Value = T

The component value for the slider.
§

const RANGED: bool = false

When true, this type is expected to represent two values: start and an + T: Clone + Debug + PartialOrd + LinearInterpolate + PercentBetween + Send + 'static,
§

type Value = T

The component value for the slider.
§

const RANGED: bool = false

When true, this type is expected to represent two values: start and an end.
§

fn into_parts( self, ) -> (<T as SliderValue>::Value, Option<<T as SliderValue>::Value>)

Returns this value split into its start and end components.
§

fn from_parts( min_or_value: <T as SliderValue>::Value, _max: Option<<T as SliderValue>::Value>, ) -> T

Constructs a value from its start and end components.
source§

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

§

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: 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§

default 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>,

§

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 + 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>,

§

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>,

§

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: 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 @@ -100,8 +109,8 @@ C: FromUints<U>,

source§

fn uints_into(self) -> C

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

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where +[WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

\ No newline at end of file diff --git a/main/funnybones/struct.Bone.html b/main/funnybones/struct.Bone.html index a9809a1..8012eda 100644 --- a/main/funnybones/struct.Bone.html +++ b/main/funnybones/struct.Bone.html @@ -1,16 +1,22 @@ -Bone in funnybones - Rust

Struct funnybones::Bone

source ·
pub struct Bone { /* private fields */ }
Expand description

A bone in a Skeleton.

-

Implementations§

source§

impl Bone

source

pub fn set_desired_end(&mut self, end: Option<Vector>)

Sets the location to aim the end of this bone towards.

+Bone in funnybones - Rust

Struct funnybones::Bone

source ·
pub struct Bone { /* private fields */ }
Expand description

A bone in a Skeleton.

+

Implementations§

source§

impl Bone

source

pub const fn id(&self) -> BoneId

Returns the unique id of this bone.

+
source

pub const fn is_root(&self) -> bool

Returns true if this bone is the root of the skeleton.

+
source

pub const fn kind(&self) -> &BoneKind

Returns the kind of this bone.

+
source

pub fn set_desired_end(&mut self, end: Option<Vector>)

Sets a relative position to aim the end of this bone towards.

The end of the bone that is aimed is the end that is furthest from the root of the skeleton.

This setting only impacts BoneKind::Jointed bones.

-
source

pub const fn desired_end(&self) -> Option<Vector>

Returns the location this bone is being aimed towards.

-
source

pub const fn start(&self) -> Vector

Returns the solved start position of this bone.

-
source

pub const fn end(&self) -> Vector

Returns the solved end position of this bone.

-
source

pub const fn solved_joint(&self) -> Option<Vector>

If this is a BoneKind::Jointed bone, returns the solved position of +

source

pub const fn desired_end(&self) -> Option<Vector>

Returns the location this bone is being aimed towards.

+
source

pub const fn entry_angle(&self) -> Angle

Returns the angle of the previous bone segment connecting to this bone.

+
source

pub const fn start(&self) -> Coordinate

Returns the solved start position of this bone.

+
source

pub const fn end(&self) -> Coordinate

Returns the solved end position of this bone.

+
source

pub fn final_vector(&self) -> Vector

Returns a vector representing the final segment in this bone.

+
source

pub const fn solved_joint(&self) -> Option<Coordinate>

If this is a BoneKind::Jointed bone, returns the solved position of the joint.

-
source

pub fn label(&self) -> &str

Returns the label this bone was created with.

-

Trait Implementations§

source§

impl Debug for Bone

source§

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

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

impl Serialize for Bone

source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where - S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Bone

§

impl RefUnwindSafe for Bone

§

impl Send for Bone

§

impl Sync for Bone

§

impl Unpin for Bone

§

impl UnwindSafe for Bone

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +

source

pub fn label(&self) -> &str

Returns the label this bone was created with.

+

Trait Implementations§

source§

impl Debug for Bone

source§

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

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

impl PartialEq for Bone

source§

fn eq(&self, other: &Bone) -> 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.
source§

impl Serialize for Bone

source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where + S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for Bone

Auto Trait Implementations§

§

impl Freeze for Bone

§

impl RefUnwindSafe for Bone

§

impl Send for Bone

§

impl Sync for Bone

§

impl Unpin for Bone

§

impl UnwindSafe for Bone

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>, @@ -23,7 +29,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -35,7 +41,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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.
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, @@ -47,7 +53,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -61,10 +67,10 @@ Converts self into a Right variant of Either<Self, Self> otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

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 + 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>,

§

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>,

§

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: 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 diff --git a/main/funnybones/struct.BoneAxis.html b/main/funnybones/struct.BoneAxis.html index a8bb537..2d20672 100644 --- a/main/funnybones/struct.BoneAxis.html +++ b/main/funnybones/struct.BoneAxis.html @@ -1,16 +1,16 @@ -BoneAxis in funnybones - Rust

Struct funnybones::BoneAxis

source ·
pub struct BoneAxis {
+BoneAxis in funnybones - Rust

Struct funnybones::BoneAxis

source ·
pub struct BoneAxis {
     pub bone: BoneId,
     pub end: BoneEnd,
 }
Expand description

A specific end of a specific bone.

Fields§

§bone: BoneId

The unique id of the bone of this axis.

§end: BoneEnd

The end of the bone being referenced.

-

Implementations§

source§

impl BoneAxis

source

pub const fn inverse(self) -> Self

Returns the opposite axis on the same bone.

-

Trait Implementations§

source§

impl Clone for BoneAxis

source§

fn clone(&self) -> BoneAxis

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for BoneAxis

source§

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

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

impl<'de> Deserialize<'de> for BoneAxis

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 Hash for BoneAxis

source§

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

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

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

Implementations§

source§

impl BoneAxis

source

pub const fn inverse(self) -> Self

Returns the opposite axis on the same bone.

+

Trait Implementations§

source§

impl Clone for BoneAxis

source§

fn clone(&self) -> BoneAxis

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for BoneAxis

source§

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

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

impl<'de> Deserialize<'de> for BoneAxis

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 Hash for BoneAxis

source§

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

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
source§

impl PartialEq for BoneAxis

source§

fn eq(&self, other: &BoneAxis) -> 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.
source§

impl Serialize for BoneAxis

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for BoneAxis

source§

impl Eq for BoneAxis

source§

impl StructuralPartialEq for BoneAxis

Auto Trait Implementations§

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where + Self: Sized,

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

impl PartialEq for BoneAxis

source§

fn eq(&self, other: &BoneAxis) -> 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.
source§

impl Serialize for BoneAxis

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for BoneAxis

source§

impl Eq for BoneAxis

source§

impl StructuralPartialEq for BoneAxis

Auto Trait Implementations§

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>, @@ -23,7 +23,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -36,7 +36,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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 @@ -52,7 +52,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -69,11 +69,11 @@ Converts self into a Right variant of Either<Self, Self> otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

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, C> TryComponentsInto<C> for T
where - C: TryFromComponents<T>,

§

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 + 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, 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>,

§

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>,

§

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: 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 @@ -81,8 +81,8 @@ C: FromUints<U>,

source§

fn uints_into(self) -> C

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

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where +[WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

\ No newline at end of file diff --git a/main/funnybones/struct.BoneId.html b/main/funnybones/struct.BoneId.html index b3455f6..33536a7 100644 --- a/main/funnybones/struct.BoneId.html +++ b/main/funnybones/struct.BoneId.html @@ -1,18 +1,19 @@ -BoneId in funnybones - Rust

Struct funnybones::BoneId

source ·
pub struct BoneId(/* private fields */);
Expand description

The unique ID of a Bone in a Skeleton.

-

Implementations§

source§

impl BoneId

source

pub const fn axis_a(self) -> BoneAxis

Returns the first axis of this bone.

-
source

pub const fn axis_b(self) -> BoneAxis

Returns the second axis of this bone.

-

Trait Implementations§

source§

impl Clone for BoneId

source§

fn clone(&self) -> BoneId

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for BoneId

source§

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

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

impl<'de> Deserialize<'de> for BoneId

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 Hash for BoneId

source§

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

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

fn hash_slice<H>(data: &[Self], state: &mut H)
where +BoneId in funnybones - Rust

Struct funnybones::BoneId

source ·
pub struct BoneId(/* private fields */);
Expand description

The unique ID of a Bone in a Skeleton.

+

Implementations§

source§

impl BoneId

source

pub const fn axis_a(self) -> BoneAxis

Returns the first axis of this bone.

+
source

pub const fn axis_b(self) -> BoneAxis

Returns the second axis of this bone.

+
source

pub fn index(self) -> usize

Returns the index of this bone within the skeleton.

+

Trait Implementations§

source§

impl Clone for BoneId

source§

fn clone(&self) -> BoneId

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for BoneId

source§

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

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

impl<'de> Deserialize<'de> for BoneId

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 Hash for BoneId

source§

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

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
source§

impl Index<BoneId> for Skeleton

§

type Output = Bone

The returned type after indexing.
source§

fn index(&self, index: BoneId) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl IndexMut<BoneId> for Skeleton

source§

fn index_mut(&mut self, index: BoneId) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
source§

impl Ord for BoneId

source§

fn cmp(&self, other: &BoneId) -> 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,

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

impl Index<BoneId> for Skeleton

source§

type Output = Bone

The returned type after indexing.
source§

fn index(&self, index: BoneId) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl IndexMut<BoneId> for Skeleton

source§

fn index_mut(&mut self, index: BoneId) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
source§

impl Ord for BoneId

source§

fn cmp(&self, other: &BoneId) -> 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 + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for BoneId

source§

fn eq(&self, other: &BoneId) -> 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.
source§

impl PartialOrd for BoneId

source§

fn partial_cmp(&self, other: &BoneId) -> 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 + Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for BoneId

source§

fn eq(&self, other: &BoneId) -> 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.
source§

impl PartialOrd for BoneId

source§

fn partial_cmp(&self, other: &BoneId) -> 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
source§

impl Serialize for BoneId

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for BoneId

source§

impl Eq for BoneId

source§

impl StructuralPartialEq for BoneId

Auto Trait Implementations§

§

impl Freeze for BoneId

§

impl RefUnwindSafe for BoneId

§

impl Send for BoneId

§

impl Sync for BoneId

§

impl Unpin for BoneId

§

impl UnwindSafe for BoneId

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +the >= operator. Read more

source§

impl Serialize for BoneId

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for BoneId

source§

impl Eq for BoneId

source§

impl StructuralPartialEq for BoneId

Auto Trait Implementations§

§

impl Freeze for BoneId

§

impl RefUnwindSafe for BoneId

§

impl Send for BoneId

§

impl Sync for BoneId

§

impl Unpin for BoneId

§

impl UnwindSafe for BoneId

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>, @@ -25,7 +26,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -40,7 +41,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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 @@ -56,7 +57,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -74,11 +75,11 @@ otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<Key, SearchFor> Sort<SearchFor> for Key
where Key: Ord + PartialOrd<SearchFor>,

§

fn compare(&self, b: &SearchFor) -> Ordering

Compare self and other, returning the comparison result. Read more
source§

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

§

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, C> TryComponentsInto<C> for T
where - C: TryFromComponents<T>,

§

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 + 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, 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>,

§

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>,

§

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: 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 @@ -86,8 +87,8 @@ C: FromUints<U>,

source§

fn uints_into(self) -> C

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

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where +[WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

\ No newline at end of file diff --git a/main/funnybones/struct.Coordinate.html b/main/funnybones/struct.Coordinate.html new file mode 100644 index 0000000..d5c8d50 --- /dev/null +++ b/main/funnybones/struct.Coordinate.html @@ -0,0 +1,92 @@ +Coordinate in funnybones - Rust

Struct funnybones::Coordinate

source ·
pub struct Coordinate {
+    pub x: f32,
+    pub y: f32,
+}
Expand description

A two dimensionsional offset/measurement.

+

Fields§

§x: f32

The x-axis component of this vector.

+
§y: f32

The y-axis component of this vector.

+

Implementations§

source§

impl Coordinate

source

pub const fn new(x: f32, y: f32) -> Self

Returns a new vector from the x and y values.

+
source

pub fn magnitude(&self) -> f32

Returns the magnitude of this vector.

+
source

pub fn map(self, f: impl FnMut(f32) -> f32) -> Self

Returns the result of mapping x and y to f.

+
source

pub fn as_rotation(self) -> Angle

Returns the angle formed a line passing through 0,0 towards this vector.

+
source

pub fn vector_to(self, other: Coordinate) -> Vector

Returns a vector pointing from self to other.

+

Trait Implementations§

source§

impl Add<Vector> for Coordinate

source§

type Output = Coordinate

The resulting type after applying the + operator.
source§

fn add(self, rhs: Vector) -> Self::Output

Performs the + operation. Read more
source§

impl Add for Coordinate

source§

type Output = Coordinate

The resulting type after applying the + operator.
source§

fn add(self, rhs: Self) -> Self::Output

Performs the + operation. Read more
source§

impl Clone for Coordinate

source§

fn clone(&self) -> Coordinate

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Coordinate

source§

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

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

impl Default for Coordinate

source§

fn default() -> Coordinate

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

impl<'de> Deserialize<'de> for Coordinate

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 Div<f32> for Coordinate

source§

type Output = Coordinate

The resulting type after applying the / operator.
source§

fn div(self, rhs: f32) -> Self::Output

Performs the / operation. Read more
source§

impl From<Coordinate> for Vector

source§

fn from(pt: Coordinate) -> Self

Converts to this type from the input type.
source§

impl From<Vector> for Coordinate

source§

fn from(vec: Vector) -> Self

Converts to this type from the input type.
source§

impl FromComponents<f32> for Coordinate

source§

fn from_components(components: (f32, f32)) -> Self

Returns a new instance from the 2d vector components provided.
§

fn from_vec<Type>(other: Type) -> Self
where + Type: IntoComponents<Unit>,

Converts this type to another type using [FromComponents] and +[IntoComponents].
source§

impl IntoComponents<f32> for Coordinate

source§

fn into_components(self) -> (f32, f32)

Extracts this type’s 2d vector components.
§

fn to_vec<Type>(self) -> Type
where + Type: FromComponents<Unit>,

Converts this type to another type using [FromComponents] and +[IntoComponents].
source§

impl Mul<f32> for Coordinate

source§

type Output = Coordinate

The resulting type after applying the * operator.
source§

fn mul(self, rhs: f32) -> Self::Output

Performs the * operation. Read more
source§

impl PartialEq for Coordinate

source§

fn eq(&self, other: &Coordinate) -> 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.
source§

impl Serialize for Coordinate

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Sub<Vector> for Coordinate

source§

type Output = Coordinate

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Vector) -> Self::Output

Performs the - operation. Read more
source§

impl Sub for Coordinate

source§

type Output = Coordinate

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self::Output

Performs the - operation. Read more
source§

impl Copy for Coordinate

source§

impl StructuralPartialEq for Coordinate

Auto Trait Implementations§

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.
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, 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<A> Cast for A

§

fn cast<To>(self) -> To
where + To: CastFrom<A>,

Casts self to the To type. This may be a lossy operation.
§

impl<A> CastFrom<A> for A

§

fn from_cast(from: A) -> A

Returns from as Self.
§

impl<A, B> CastInto<A> for B
where + A: CastFrom<B>,

§

fn cast_into(self) -> A

Returns self as To.
source§

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

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
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<T> for T

§

fn downcast(&self) -> &T

§

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

impl<Unit> IntoComponents<Unit> for Unit
where + Unit: Copy,

§

fn into_components(self) -> (Unit, Unit)

Extracts this type’s 2d vector components.
§

fn to_vec<Type>(self) -> Type
where + Type: FromComponents<Unit>,

Converts this type to another type using [FromComponents] and +[IntoComponents].
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<R, P> ReadPrimitive<R> for P
where + R: Read + ReadEndian<P>, + P: Default,

source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
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, 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<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where + T: Send,

§

impl<T> WasmNotSendSync for T
where + T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where + T: Sync,

\ No newline at end of file diff --git a/main/funnybones/struct.Joint.html b/main/funnybones/struct.Joint.html index 5be4771..974da0b 100644 --- a/main/funnybones/struct.Joint.html +++ b/main/funnybones/struct.Joint.html @@ -1,18 +1,20 @@ -Joint in funnybones - Rust

Struct funnybones::Joint

source ·
pub struct Joint { /* private fields */ }
Expand description

A connection between two bones.

-

Implementations§

source§

impl Joint

source

pub const fn new(angle: Rotation, bone_a: BoneAxis, bone_b: BoneAxis) -> Self

Returns a new joint formed by joining bone_a and bone_b at angle.

-
source

pub fn with_label(self, label: impl Into<String>) -> Self

Labels this joint and returns self.

-
source

pub fn label(&self) -> &str

Returns the label of this joint.

-
source

pub fn other_axis(&self, axis: BoneAxis) -> BoneAxis

Given axis is one of the two connections in this joint, return the +Joint in funnybones - Rust

Struct funnybones::Joint

source ·
pub struct Joint { /* private fields */ }
Expand description

A connection between two bones.

+

Implementations§

source§

impl Joint

source

pub const fn id(&self) -> JointId

Returns the unique id of this joint.

+
source

pub const fn new(angle: Angle, bone_a: BoneAxis, bone_b: BoneAxis) -> Self

Returns a new joint formed by joining bone_a and bone_b at angle.

+
source

pub fn with_label(self, label: impl Into<String>) -> Self

Labels this joint and returns self.

+
source

pub fn label(&self) -> &str

Returns the label of this joint.

+
source

pub fn other_axis(&self, axis: BoneAxis) -> BoneAxis

Given axis is one of the two connections in this joint, return the other axis.

§Panics

This function has a debug assertion that ensures that axis is one of the bones in this joint.

-
source

pub fn set_angle(&mut self, angle: Rotation)

Sets the angle to form between these joints.

+
source

pub fn set_angle(&mut self, angle: Angle)

Sets the angle to form between these joints.

This setting is ignored if the bone furthest from the root of the joint is a BoneKind::Jointed bone.

-
source

pub const fn angle(&self) -> Rotation

Returns the rotation of this joint.

-

Trait Implementations§

source§

impl Debug for Joint

source§

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

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

impl Serialize for Joint

source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where - S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Joint

§

impl RefUnwindSafe for Joint

§

impl Send for Joint

§

impl Sync for Joint

§

impl Unpin for Joint

§

impl UnwindSafe for Joint

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +

source

pub const fn angle(&self) -> Angle

Returns the rotation of this joint.

+

Trait Implementations§

source§

impl Debug for Joint

source§

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

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

impl PartialEq for Joint

source§

fn eq(&self, other: &Joint) -> 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.
source§

impl Serialize for Joint

source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where + S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for Joint

Auto Trait Implementations§

§

impl Freeze for Joint

§

impl RefUnwindSafe for Joint

§

impl Send for Joint

§

impl Sync for Joint

§

impl Unpin for Joint

§

impl UnwindSafe for Joint

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>, @@ -25,7 +27,7 @@
§Panics
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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -37,7 +39,7 @@
§Panics
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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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.
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, @@ -49,7 +51,7 @@
§Panics
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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -63,10 +65,10 @@
§Panics
Converts self into a Right variant of Either<Self, Self> otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

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 + 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>,

§

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>,

§

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: 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 diff --git a/main/funnybones/struct.JointId.html b/main/funnybones/struct.JointId.html index cdc2502..be0408f 100644 --- a/main/funnybones/struct.JointId.html +++ b/main/funnybones/struct.JointId.html @@ -1,16 +1,17 @@ -JointId in funnybones - Rust

Struct funnybones::JointId

source ·
pub struct JointId(/* private fields */);
Expand description

The unique ID of a Joint in a Skeleton.

-

Trait Implementations§

source§

impl Clone for JointId

source§

fn clone(&self) -> JointId

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for JointId

source§

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

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

impl<'de> Deserialize<'de> for JointId

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 Hash for JointId

source§

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

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

fn hash_slice<H>(data: &[Self], state: &mut H)
where +JointId in funnybones - Rust

Struct funnybones::JointId

source ·
pub struct JointId(/* private fields */);
Expand description

The unique ID of a Joint in a Skeleton.

+

Implementations§

source§

impl JointId

source

pub fn index(self) -> usize

Returns the index of this joint within the skeleton.

+

Trait Implementations§

source§

impl Clone for JointId

source§

fn clone(&self) -> JointId

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for JointId

source§

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

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

impl<'de> Deserialize<'de> for JointId

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 Hash for JointId

source§

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

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
source§

impl Index<JointId> for Skeleton

§

type Output = Joint

The returned type after indexing.
source§

fn index(&self, index: JointId) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl IndexMut<JointId> for Skeleton

source§

fn index_mut(&mut self, index: JointId) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
source§

impl Ord for JointId

source§

fn cmp(&self, other: &JointId) -> 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,

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

impl Index<JointId> for Skeleton

source§

type Output = Joint

The returned type after indexing.
source§

fn index(&self, index: JointId) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl IndexMut<JointId> for Skeleton

source§

fn index_mut(&mut self, index: JointId) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
source§

impl Ord for JointId

source§

fn cmp(&self, other: &JointId) -> 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 + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for JointId

source§

fn eq(&self, other: &JointId) -> 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.
source§

impl PartialOrd for JointId

source§

fn partial_cmp(&self, other: &JointId) -> 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 + Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for JointId

source§

fn eq(&self, other: &JointId) -> 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.
source§

impl PartialOrd for JointId

source§

fn partial_cmp(&self, other: &JointId) -> 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
source§

impl Serialize for JointId

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for JointId

source§

impl Eq for JointId

source§

impl StructuralPartialEq for JointId

Auto Trait Implementations§

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +the >= operator. Read more

source§

impl Serialize for JointId

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for JointId

source§

impl Eq for JointId

source§

impl StructuralPartialEq for JointId

Auto Trait Implementations§

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>, @@ -23,7 +24,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -38,7 +39,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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 @@ -54,7 +55,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -72,11 +73,11 @@ otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<Key, SearchFor> Sort<SearchFor> for Key
where Key: Ord + PartialOrd<SearchFor>,

§

fn compare(&self, b: &SearchFor) -> Ordering

Compare self and other, returning the comparison result. Read more
source§

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

§

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, C> TryComponentsInto<C> for T
where - C: TryFromComponents<T>,

§

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 + 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, 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>,

§

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>,

§

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: 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 @@ -84,8 +85,8 @@ C: FromUints<U>,

source§

fn uints_into(self) -> C

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

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where +[WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

\ No newline at end of file diff --git a/main/funnybones/struct.LabeledBoneKind.html b/main/funnybones/struct.LabeledBoneKind.html index d33b33e..31d59c4 100644 --- a/main/funnybones/struct.LabeledBoneKind.html +++ b/main/funnybones/struct.LabeledBoneKind.html @@ -1,10 +1,10 @@ -LabeledBoneKind in funnybones - Rust

Struct funnybones::LabeledBoneKind

source ·
pub struct LabeledBoneKind {
+LabeledBoneKind in funnybones - Rust

Struct funnybones::LabeledBoneKind

source ·
pub struct LabeledBoneKind {
     pub kind: BoneKind,
     pub label: String,
 }
Expand description

A BoneKind with an associated label.

Fields§

§kind: BoneKind

The bone to create.

§label: String

The label of the bone.

-

Trait Implementations§

source§

impl From<BoneKind> for LabeledBoneKind

source§

fn from(kind: BoneKind) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +

Trait Implementations§

source§

impl From<BoneKind> for LabeledBoneKind

source§

fn from(kind: BoneKind) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

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>, @@ -17,7 +17,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -29,7 +29,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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.
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, @@ -41,7 +41,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -55,10 +55,10 @@ Converts self into a Right variant of Either<Self, Self> otherwise. Read more

§

impl<T> IntoReadOnly<T> for T

§

fn into_read_only(self) -> ReadOnly<T>

Returns self as a ReadOnly.
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> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

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 + 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>,

§

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>,

§

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: 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 diff --git a/main/funnybones/struct.Skeleton.html b/main/funnybones/struct.Skeleton.html index c6326ca..66b9e75 100644 --- a/main/funnybones/struct.Skeleton.html +++ b/main/funnybones/struct.Skeleton.html @@ -1,22 +1,26 @@ -Skeleton in funnybones - Rust

Struct funnybones::Skeleton

source ·
pub struct Skeleton { /* private fields */ }
Expand description

A collection of Bones. connected by Joints.

-

Implementations§

source§

impl Skeleton

source

pub fn push_bone(&mut self, bone: impl Into<LabeledBoneKind>) -> BoneId

Creates a new Bone into the skeleton. Returns the unique id of the +Skeleton in funnybones - Rust

Struct funnybones::Skeleton

source ·
pub struct Skeleton { /* private fields */ }
Expand description

A collection of Bones. connected by Joints.

+

Implementations§

source§

impl Skeleton

source

pub fn push_bone(&mut self, bone: impl Into<LabeledBoneKind>) -> BoneId

Creates a new Bone into the skeleton. Returns the unique id of the created bone.

The first bone pushed is considered the root of the skeleton. All other bones must be connected to the root directly or indirectly through Joints.

-
source

pub fn push_joint(&mut self, joint: Joint) -> JointId

Creates a new Joint in the skeleton, connecting two bones together +

source

pub fn bones(&self) -> &[Bone]

Returns the list of bones in this skeleton.

+
source

pub fn joints(&self) -> &[Joint]

Returns the list of joints in this skeleton.

+
source

pub fn connections_to(&self, axis: BoneAxis) -> Option<&[JointId]>

Returns a list of joints connected to a specific bone axis.

+
source

pub fn push_joint(&mut self, joint: Joint) -> JointId

Creates a new Joint in the skeleton, connecting two bones together by their axis. Returns the unique id of the created joint.

-
source

pub fn find_joint_by_label(&self, label: &str) -> Option<JointId>

Finds an existing Joint by its label.

-
source

pub fn find_bone_by_label(&self, label: &str) -> Option<BoneId>

Finds an existing Bone by its label.

-
source

pub fn set_translation(&mut self, translation: Vector)

Sets a translation to be applied to the entire skeleton.

-
source

pub fn translation(&self) -> Vector

Returns the translation applied to the entire skeleton.

-
source

pub fn set_rotation(&mut self, rotation: Rotation)

Sets a base rotation to apply to the entire skeleton.

-
source

pub fn rotation(&self) -> Rotation

Returns the base rotation being applied to the entire skeleton.

-
source

pub fn solve(&mut self)

Updates the solved positions of all bones in this skeleton that are +

source

pub fn find_joint_by_label(&self, label: &str) -> Option<JointId>

Finds an existing Joint by its label.

+
source

pub fn find_bone_by_label(&self, label: &str) -> Option<BoneId>

Finds an existing Bone by its label.

+
source

pub fn set_translation(&mut self, translation: Coordinate)

Sets a translation to be applied to the entire skeleton.

+
source

pub fn translation(&self) -> Coordinate

Returns the translation applied to the entire skeleton.

+
source

pub fn set_rotation(&mut self, rotation: Angle)

Sets a base rotation to apply to the entire skeleton.

+
source

pub const fn rotation(&self) -> Angle

Returns the base rotation being applied to the entire skeleton.

+
source

pub fn solve(&mut self)

Updates the solved positions of all bones in this skeleton that are connected either directly or indirectly to the root bone via Joints.

-

Trait Implementations§

source§

impl Debug for Skeleton

source§

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

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

impl Default for Skeleton

source§

fn default() -> Skeleton

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

impl<'de> Deserialize<'de> for Skeleton

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 Index<BoneId> for Skeleton

§

type Output = Bone

The returned type after indexing.
source§

fn index(&self, index: BoneId) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl Index<JointId> for Skeleton

§

type Output = Joint

The returned type after indexing.
source§

fn index(&self, index: JointId) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl IndexMut<BoneId> for Skeleton

source§

fn index_mut(&mut self, index: BoneId) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
source§

impl IndexMut<JointId> for Skeleton

source§

fn index_mut(&mut self, index: JointId) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
source§

impl Serialize for Skeleton

source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where - S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +

Trait Implementations§

source§

impl Debug for Skeleton

source§

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

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

impl Default for Skeleton

source§

fn default() -> Skeleton

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

impl<'de> Deserialize<'de> for Skeleton

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 Index<BoneId> for Skeleton

source§

type Output = Bone

The returned type after indexing.
source§

fn index(&self, index: BoneId) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl Index<JointId> for Skeleton

source§

type Output = Joint

The returned type after indexing.
source§

fn index(&self, index: JointId) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl IndexMut<BoneId> for Skeleton

source§

fn index_mut(&mut self, index: BoneId) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
source§

impl IndexMut<JointId> for Skeleton

source§

fn index_mut(&mut self, index: JointId) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
source§

impl PartialEq for Skeleton

source§

fn eq(&self, other: &Skeleton) -> 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.
source§

impl Serialize for Skeleton

source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where + S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for Skeleton

Auto Trait Implementations§

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>, @@ -29,7 +33,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -41,7 +45,7 @@ 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 + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be + 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.
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, @@ -53,7 +57,7 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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 @@ -69,10 +73,10 @@ rounding and clamping.

§

impl<T> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
source§

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

§

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 + 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>,

§

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>,

§

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: 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 @@ -80,8 +84,8 @@ C: FromUints<U>,

source§

fn uints_into(self) -> C

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

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where +[WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

\ No newline at end of file diff --git a/main/funnybones/struct.Vector.html b/main/funnybones/struct.Vector.html index 6eaf676..7b93ec8 100644 --- a/main/funnybones/struct.Vector.html +++ b/main/funnybones/struct.Vector.html @@ -1,20 +1,14 @@ -Vector in funnybones - Rust

Struct funnybones::Vector

source ·
pub struct Vector {
-    pub x: f32,
-    pub y: f32,
-}
Expand description

A two dimensionsional offset/measurement.

-

Fields§

§x: f32

The x-axis component of this vector.

-
§y: f32

The y-axis component of this vector.

-

Implementations§

source§

impl Vector

source

pub const fn new(x: f32, y: f32) -> Self

Returns a new vector from the x and y values.

-
source

pub fn magnitude(&self) -> f32

Returns the magnitude of this vector.

-
source

pub fn map(self, f: impl FnMut(f32) -> f32) -> Self

Returns the result of mapping x and y to f.

-

Trait Implementations§

source§

impl Clone for Vector

source§

fn clone(&self) -> Vector

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Vector

source§

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

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

impl Default for Vector

source§

fn default() -> Vector

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

impl<'de> Deserialize<'de> for Vector

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 FromComponents<f32> for Vector

source§

fn from_components(components: (f32, f32)) -> Self

Returns a new instance from the 2d vector components provided.
§

fn from_vec<Type>(other: Type) -> Self
where - Type: IntoComponents<Unit>,

Converts this type to another type using [FromComponents] and -[IntoComponents].
source§

impl IntoComponents<f32> for Vector

source§

fn into_components(self) -> (f32, f32)

Extracts this type’s 2d vector components.
§

fn to_vec<Type>(self) -> Type
where - Type: FromComponents<Unit>,

Converts this type to another type using [FromComponents] and -[IntoComponents].
source§

impl PartialEq for Vector

source§

fn eq(&self, other: &Vector) -> 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.
source§

impl Serialize for Vector

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Sub for Vector

§

type Output = Vector

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self::Output

Performs the - operation. Read more
source§

impl Copy for Vector

source§

impl StructuralPartialEq for Vector

Auto Trait Implementations§

§

impl Freeze for Vector

§

impl RefUnwindSafe for Vector

§

impl Send for Vector

§

impl Sync for Vector

§

impl Unpin for Vector

§

impl UnwindSafe for Vector

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where +Vector in funnybones - Rust

Struct funnybones::Vector

source ·
pub struct Vector {
+    pub magnitude: f32,
+    pub direction: Angle,
+}
Expand description

A 2D Euclidean vector.

+

Fields§

§magnitude: f32

The length of the vector.

+
§direction: Angle

The direction the vector is heading.

+

Implementations§

source§

impl Vector

source

pub const fn new(magnitude: f32, direction: Angle) -> Self

Returns a new vector for the given magnitude and direction.

+

Trait Implementations§

source§

impl Add<Angle> for Vector

source§

type Output = Vector

The resulting type after applying the + operator.
source§

fn add(self, rhs: Angle) -> Self::Output

Performs the + operation. Read more
source§

impl Add<Vector> for Coordinate

source§

type Output = Coordinate

The resulting type after applying the + operator.
source§

fn add(self, rhs: Vector) -> Self::Output

Performs the + operation. Read more
source§

impl Clone for Vector

source§

fn clone(&self) -> Vector

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Vector

source§

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

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

impl Default for Vector

source§

fn default() -> Vector

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

impl<'de> Deserialize<'de> for Vector

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 From<Coordinate> for Vector

source§

fn from(pt: Coordinate) -> Self

Converts to this type from the input type.
source§

impl From<Vector> for Coordinate

source§

fn from(vec: Vector) -> Self

Converts to this type from the input type.
source§

impl LinearInterpolate for Vector

source§

fn lerp(&self, target: &Self, percent: f32) -> Self

Interpolate linearly between self and target using percent.
source§

impl PartialEq for Vector

source§

fn eq(&self, other: &Vector) -> 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.
source§

impl Serialize for Vector

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Sub<Angle> for Vector

source§

type Output = Vector

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Angle) -> Self::Output

Performs the - operation. Read more
source§

impl Sub<Vector> for Coordinate

source§

type Output = Coordinate

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Vector) -> Self::Output

Performs the - operation. Read more
source§

impl Copy for Vector

source§

impl StructuralPartialEq for Vector

Auto Trait Implementations§

§

impl Freeze for Vector

§

impl RefUnwindSafe for Vector

§

impl Send for Vector

§

impl Sync for Vector

§

impl Unpin for Vector

§

impl UnwindSafe for Vector

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>, @@ -27,7 +21,7 @@ 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>,

§

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

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

fn cam16_into_unclamped( + 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<A> Cast for A

§

fn cast<To>(self) -> To
where @@ -40,8 +34,8 @@ 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 + Send + Sync>

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

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+ 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.
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 @@ -52,13 +46,13 @@ 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.
source§

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

§

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

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

fn into_cam16_unclamped( + 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
§

impl<Unit> IntoComponents<Unit> for Unit
where - Unit: Copy,

§

fn into_components(self) -> (Unit, Unit)

Extracts this type’s 2d vector components.
§

fn to_vec<Type>(self) -> Type
where + Unit: Copy,

§

fn into_components(self) -> (Unit, Unit)

Extracts this type’s 2d vector components.
§

fn to_vec<Type>(self) -> Type
where Type: FromComponents<Unit>,

Converts this type to another type using [FromComponents] and [IntoComponents].
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. @@ -71,11 +65,11 @@ rounding and clamping.
§

impl<T> IntoValue<Option<T>> for T

§

fn into_value(self) -> Value<Option<T>>

Returns this type as a [Value].
§

impl<T> IntoValue<T> for T

§

fn into_value(self) -> Value<T>

Returns this type as a [Value].
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
source§

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

§

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, C> TryComponentsInto<C> for T
where - C: TryFromComponents<T>,

§

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 + 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, 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>,

§

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>,

§

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: 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 @@ -83,8 +77,8 @@ C: FromUints<U>,

source§

fn uints_into(self) -> C

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

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where +[WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

\ No newline at end of file diff --git a/main/help.html b/main/help.html index a9e765b..2c023f8 100644 --- a/main/help.html +++ b/main/help.html @@ -1 +1 @@ -Help

Rustdoc help

Back
\ No newline at end of file +Help

Rustdoc help

Back
\ No newline at end of file diff --git a/main/search-index.js b/main/search-index.js index f2a8699..a7a1610 100644 --- a/main/search-index.js +++ b/main/search-index.js @@ -1,5 +1,4 @@ -var searchIndex = new Map(JSON.parse('[\ -["funnybones",{"t":"PPFFGFGFFPFPFFFNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOFPFGFPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOO","n":["A","B","Bone","BoneAxis","BoneEnd","BoneId","BoneKind","Joint","JointId","Jointed","LabeledBoneKind","Rigid","Rotation","Skeleton","Vector","adapt_into_using","adapt_into_using","adapt_into_using","adapt_into_using","adapt_into_using","adapt_into_using","adapt_into_using","adapt_into_using","adapt_into_using","adapt_into_using","adapt_into_using","add","angle","animation","arrays_from","arrays_from","arrays_from","arrays_from","arrays_from","arrays_from","arrays_from","arrays_from","arrays_from","arrays_from","arrays_from","arrays_into","arrays_into","arrays_into","arrays_into","arrays_into","arrays_into","arrays_into","arrays_into","arrays_into","arrays_into","arrays_into","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","axis_a","axis_b","bone","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cast","cast","cast","cast","cast","cast","cast","cast","cast","cast","cast","cast_into","cast_into","cast_into","cast_into","cast_into","cast_into","cast_into","cast_into","cast_into","cast_into","cast_into","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_to_uninit","clone_to_uninit","clone_to_uninit","clone_to_uninit","clone_to_uninit","clone_to_uninit","clone_to_uninit","cmp","cmp","compare","compare","compare","compare","components_from","components_from","components_from","components_from","components_from","components_from","components_from","components_from","components_from","components_from","components_from","default","default","default","degrees","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","desired_end","downcast","downcast","downcast","downcast","downcast","downcast","downcast","downcast","downcast","downcast","downcast","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","end","end","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","find_bone_by_label","find_joint_by_label","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from_angle","from_angle","from_angle","from_angle","from_angle","from_angle","from_angle","from_angle","from_angle","from_angle","from_angle","from_cast","from_cast","from_cast","from_cast","from_cast","from_cast","from_cast","from_cast","from_cast","from_cast","from_cast","from_components","from_parts","from_stimulus","from_stimulus","from_stimulus","from_stimulus","from_stimulus","from_stimulus","from_stimulus","from_stimulus","from_stimulus","from_stimulus","from_stimulus","hash","hash","hash","hash","index","index","index_mut","index_mut","init","init","init","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into","into","into","into_angle","into_angle","into_angle","into_angle","into_angle","into_angle","into_angle","into_angle","into_angle","into_angle","into_angle","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_color","into_color","into_color","into_color","into_color","into_color","into_color","into_color","into_color","into_color","into_color","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_components","into_components","into_components","into_components","into_components","into_components","into_components","into_components","into_parts","into_read_only","into_read_only","into_read_only","into_read_only","into_read_only","into_read_only","into_read_only","into_read_only","into_read_only","into_read_only","into_read_only","into_stimulus","into_stimulus","into_stimulus","into_stimulus","into_stimulus","into_stimulus","into_stimulus","into_stimulus","into_stimulus","into_stimulus","into_stimulus","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","inverse","inverse","kind","label","label","label","lerp","magnitude","map","neg","new","new","other_axis","partial_cmp","partial_cmp","partial_cmp","percent_between","push_bone","push_joint","radians","rotation","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","set_angle","set_desired_end","set_rotation","set_translation","solve","solved_joint","start","sub","sub","to_degrees","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_radians","to_smolstr","to_string","translation","try_components_into","try_components_into","try_components_into","try_components_into","try_components_into","try_components_into","try_components_into","try_components_into","try_components_into","try_components_into","try_components_into","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into_color","try_into_color","try_into_color","try_into_color","try_into_color","try_into_color","try_into_color","try_into_color","try_into_color","try_into_color","try_into_color","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","uints_from","uints_from","uints_from","uints_from","uints_from","uints_from","uints_from","uints_from","uints_from","uints_from","uints_from","uints_into","uints_into","uints_into","uints_into","uints_into","uints_into","uints_into","uints_into","uints_into","uints_into","uints_into","upcast","upcast","upcast","upcast","upcast","upcast","upcast","upcast","upcast","upcast","upcast","with_label","with_label","x","y","end_length","inverse","length","start_length","Animation","Bone","Change","ChangeKind","Frame","Joint","RunningAnimation","adapt_into_using","adapt_into_using","adapt_into_using","adapt_into_using","adapt_into_using","arrays_from","arrays_from","arrays_from","arrays_from","arrays_from","arrays_into","arrays_into","arrays_into","arrays_into","arrays_into","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cam16_into_unclamped","cast","cast","cast","cast","cast","cast_into","cast_into","cast_into","cast_into","cast_into","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_to_uninit","clone_to_uninit","clone_to_uninit","clone_to_uninit","components_from","components_from","components_from","components_from","components_from","default","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","downcast","downcast","downcast","downcast","downcast","drop","drop","drop","drop","drop","duration","eq","eq","eq","eq","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_angle","from_angle","from_angle","from_angle","from_angle","from_cast","from_cast","from_cast","from_cast","from_cast","from_stimulus","from_stimulus","from_stimulus","from_stimulus","from_stimulus","init","init","init","init","init","insert","into","into","into","into","into","into_angle","into_angle","into_angle","into_angle","into_angle","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_cam16_unclamped","into_color","into_color","into_color","into_color","into_color","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_color_unclamped","into_components","into_components","into_read_only","into_read_only","into_read_only","into_read_only","into_read_only","into_stimulus","into_stimulus","into_stimulus","into_stimulus","into_stimulus","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","into_value","looping","new","push","push_change","remove","serialize","serialize","serialize","set_duration","set_variable","start","to_owned","to_owned","to_owned","to_owned","try_components_into","try_components_into","try_components_into","try_components_into","try_components_into","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into_color","try_into_color","try_into_color","try_into_color","try_into_color","type_id","type_id","type_id","type_id","type_id","uints_from","uints_from","uints_from","uints_from","uints_from","uints_into","uints_into","uints_into","uints_into","uints_into","upcast","upcast","upcast","upcast","upcast","update","variable","with","with_change","with_easing","with_variable","bone","joint","position","rotation"],"q":[[0,"funnybones"],[612,"funnybones::BoneKind"],[616,"funnybones::animation"],[877,"funnybones::animation::ChangeKind"],[881,"palette::chromatic_adaptation"],[882,"core::any"],[883,"palette::cam16::parameters"],[884,"intentional::cast"],[885,"core::cmp"],[886,"core::result"],[887,"serde::de"],[888,"core::option"],[889,"core::fmt"],[890,"cushy::context"],[891,"core::hash"],[892,"alloc::boxed"],[893,"alloc::sync"],[894,"alloc::rc"],[895,"cushy::value"],[896,"core::ops::function"],[897,"cushy::animation"],[898,"core::convert"],[899,"serde::ser"],[900,"smol_str"],[901,"alloc::string"],[902,"palette::convert::try_from_into_color"],[903,"core::time"],[904,"alloc::borrow"],[905,"easing_function::easings"]],"i":[14,14,0,0,0,0,0,0,0,12,0,12,0,0,0,30,11,2,12,17,8,22,3,7,13,14,2,3,0,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,7,7,8,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,11,2,12,8,7,13,14,11,2,12,8,7,13,14,11,2,12,8,7,13,14,7,13,7,7,13,13,30,11,2,12,17,8,22,3,7,13,14,11,2,17,2,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,11,2,12,17,8,7,13,14,22,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,22,8,11,2,12,8,7,13,14,8,8,8,7,7,7,13,13,13,14,14,14,17,17,11,2,2,2,12,17,8,22,3,7,13,14,30,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,11,2,30,11,2,12,17,8,22,3,7,13,14,8,7,13,14,17,17,17,17,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,11,11,2,12,8,7,13,14,2,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,30,11,11,2,2,12,12,17,17,8,8,22,22,3,3,7,7,13,13,14,14,8,14,30,22,3,30,2,11,11,2,11,3,3,2,7,13,2,17,17,2,17,11,2,12,17,8,22,3,7,13,14,3,22,17,17,17,22,22,11,2,2,11,2,12,8,7,13,14,2,2,2,17,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,30,11,2,12,17,8,22,3,7,13,14,12,3,11,11,55,55,56,55,0,50,0,0,0,50,0,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,47,48,49,50,47,48,49,50,47,48,49,50,52,47,48,49,50,47,52,47,47,48,48,49,50,52,47,47,48,48,49,50,48,49,50,52,47,48,49,50,52,47,48,49,50,48,47,48,49,50,47,48,49,50,52,47,48,49,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,47,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,49,50,52,47,48,49,50,52,47,48,49,50,52,52,47,47,48,48,49,49,50,50,52,48,47,48,47,48,49,50,48,47,47,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,48,49,50,52,47,47,48,50,47,57,58,57,58],"f":"```````````````{eg{}{{b{c}}}{}}0000000000{{dd}c{}}{{{h{f}}}d}`{ce{}{}}0000000000{{}c{}}0000000000{h{{h{j}}}}0000000000{{{h{l}}}{{h{lj}}}}0000000000{nA`}0`{h{{h{c}}}{}}0000000000{{{h{l}}}{{h{lc}}}{}}0000000000{{{Ab{c}}}e{}{}}0000000000{{}e{}{{Ad{c}}}}000000000077777777777{{{h{Af}}}Af}{{{h{d}}}d}{{{h{Ah}}}Ah}{{{h{A`}}}A`}{{{h{n}}}n}{{{h{Aj}}}Aj}{{{h{Al}}}Al}{{h{h{lc}}}An{}}000000{hAn}000000{{{h{n}}{h{n}}}B`}{{{h{Aj}}{h{Aj}}}B`}{{h{h{c}}}B`{}}000{ce{}{}}0000000000{{}Af}{{}d}{{}Bb}{Bdd}{Bf{{h{c}}}{}}0000000000{Bf{{h{lc}}}{}}0000000000{c{{Bh{Af}}}Bj}{c{{Bh{d}}}Bj}{c{{Bh{Ah}}}Bj}{c{{Bh{Bb}}}Bj}{c{{Bh{A`}}}Bj}{c{{Bh{n}}}Bj}{c{{Bh{Aj}}}Bj}{c{{Bh{Al}}}Bj}{{{h{Bl}}}{{Bn{Af}}}}{h{{h{c}}}{}}0000000000{BfAn}0000000000{{{h{Bl}}}Af}`{{{h{Af}}{h{Af}}}C`}{{{h{d}}{h{d}}}C`}{{{h{Ah}}{h{Ah}}}C`}{{{h{A`}}{h{A`}}}C`}{{{h{n}}{h{n}}}C`}{{{h{Aj}}{h{Aj}}}C`}{{{h{Al}}{h{Al}}}C`}{{h{h{c}}}C`{}}00000000000{{{h{Bb}}{h{Cb}}}{{Bn{n}}}}{{{h{Bb}}{h{Cb}}}{{Bn{Aj}}}}{{{h{Af}}{h{lCd}}}Cf}{{h{h{Ch}}{h{lCd}}}{{Bh{AnCj}}}}{{{h{d}}{h{lCd}}}Cf}0{{{h{Ah}}{h{lCd}}}Cf}{{{h{Bb}}{h{lCd}}}Cf}{{{h{A`}}{h{lCd}}}Cf}{{{h{Bl}}{h{lCd}}}Cf}{{{h{f}}{h{lCd}}}Cf}{{{h{n}}{h{lCd}}}Cf}{{{h{Aj}}{h{lCd}}}Cf}{{{h{Al}}{h{lCd}}}Cf}{AhCl}{cc{}}00000000000000000000000000000000{{{Cn{BdBd}}}Af}{Bnc{}}{ce{}{}}0000000000{{{h{A`}}{h{lc}}}AnD`}{{{h{n}}{h{lc}}}AnD`}{{{h{Aj}}{h{lc}}}AnD`}{{{h{Al}}{h{lc}}}AnD`}{{{h{Bb}}Aj}{{h{c}}}{}}{{{h{Bb}}n}{{h{c}}}{}}{{{h{lBb}}Aj}{{h{lc}}}{}}{{{h{lBb}}n}{{h{lc}}}{}}{{}Bf}0000000000{{}c{}}000000000000000000000{{{Db{c}}}{{Db{j}}}{}}0000000000{{{Dd{c}}}{{Dd{j}}}{}}0000000000{{{Df{c}}}{{Df{j}}}{}}0000000000{{{Ab{c}}}e{}{}}00000000004444444444444444444444{{}{{Cn{cc}}}{}}{Af{{Cn{BdBd}}}}111111{{}{{Cn{Bn}}}}{{}{{Dh{c}}}{}}000000000088888888888{{}{{Dj{c}}}{}}{{}{{Dj{{Bn{c}}}}}{}}10101010101001100101{A`A`}{AlAl}`{{{h{Bl}}}{{h{Cb}}}}{{{h{f}}}{{h{Cb}}}}`{{{h{d}}{h{d}}Bd}d}{{{h{Af}}}Bd}{{Afc}Af{{Dn{Bd}{{Dl{Bd}}}}}}{dc{}}{{BdBd}Af}{{dA`A`}f}{{{h{f}}A`}A`}{{{h{d}}{h{d}}}{{Bn{B`}}}}{{{h{n}}{h{n}}}{{Bn{B`}}}}{{{h{Aj}}{h{Aj}}}{{Bn{B`}}}}{{{h{d}}{h{d}}{h{d}}}E`}{{{h{lBb}}c}n{{Eb{Cl}}}}{{{h{lBb}}f}Aj}{Bdd}{{{h{Bb}}}d}{{{h{Af}}c}BhEd}{{{h{d}}c}BhEd}{{{h{Ah}}c}BhEd}{{{h{Bb}}c}BhEd}{{{h{A`}}c}BhEd}{{{h{Bl}}c}BhEd}{{{h{f}}c}BhEd}{{{h{n}}c}BhEd}{{{h{Aj}}c}BhEd}{{{h{Al}}c}BhEd}{{{h{lf}}d}An}{{{h{lBl}}{Bn{Af}}}An}{{{h{lBb}}d}An}{{{h{lBb}}Af}An}{{{h{lBb}}}An}{{{h{Bl}}}{{Bn{Af}}}}{{{h{Bl}}}Af}{{AfAf}c{}}{{dd}c{}}{dBd}{hc{}}0000001{hEf}{hEh}{{{h{Bb}}}Af}{{}{{Bh{c}}}{}}0000000000{c{{Bh{e}}}{}{}}000000000011111111111{{}{{Bh{c{Ej{c}}}}}{}}0000000000{hEl}0000000000{ce{}{}}0000000000{{}c{}}0000000000{h{{Bn{{h{c}}}}}{}}0000000000{{Ahc}Cl{{Eb{Eh}}}}{{fc}f{{Eb{Eh}}}}`````````````{eg{}{{b{c}}}{}}00005555544444{h{{h{j}}}}0000{{{h{l}}}{{h{lj}}}}0000{h{{h{c}}}{}}0000{{{h{l}}}{{h{lc}}}{}}0000{{{Ab{c}}}e{}{}}0000{{}e{}{{Ad{c}}}}0000:::::{{{h{En}}}En}{{{h{F`}}}F`}{{{h{Fb}}}Fb}{{{h{Fd}}}Fd}{{h{h{lc}}}An{}}000{hAn}000{ce{}{}}0000{{}En}{Bf{{h{c}}}{}}{{{h{En}}}{{h{c}}}{}}11{{{h{F`}}}{{h{c}}}{}}22{Bf{{h{lc}}}{}}0{{{h{lEn}}}{{h{lc}}}{}}1{{{h{lF`}}}{{h{lc}}}{}}22{c{{Bh{F`}}}Bj}{c{{Bh{Fb}}}Bj}{c{{Bh{Fd}}}Bj}{h{{h{c}}}{}}0000{BfAn}0000{{{h{F`}}}Ff}{{{h{En}}{h{En}}}C`}{{{h{F`}}{h{F`}}}C`}{{{h{Fb}}{h{Fb}}}C`}{{{h{Fd}}{h{Fd}}}C`}{{{h{En}}{h{lCd}}}Cf}{{{h{F`}}{h{lCd}}}Cf}{{{h{Fb}}{h{lCd}}}Cf}{{{h{Fd}}{h{lCd}}}Cf}{cc{}}000{FdFb}11111111111{ce{}{}}0000{{}Bf}0000{{{h{lEn}}BfF`}An}{{}c{}}000000000{{{Db{c}}}{{Db{j}}}{}}0000{{{Dd{c}}}{{Dd{j}}}{}}0000{{{Df{c}}}{{Df{j}}}{}}0000{{{Ab{c}}}e{}{}}00004444444444{{}{{Cn{cc}}}{}}0{{}{{Dh{c}}}{}}000066666{{}{{Dj{{Bn{c}}}}}{}}{{}{{Dj{c}}}{}}01101010{FhFh}{FfF`}{{{h{lEn}}F`}An}{{{h{lF`}}c}An{{Eb{Fb}}}}{{{h{lEn}}Bf}F`}{{{h{F`}}c}BhEd}{{{h{Fb}}c}BhEd}{{{h{Fd}}c}BhEd}{{{h{lF`}}Ff}An}{{{h{lEn}}cBd}An{{Eb{{Fj{Cb}}}}}}{{{h{En}}}Fh}{hc{}}000{{}{{Bh{c}}}{}}0000{c{{Bh{e}}}{}{}}000011111{{}{{Bh{c{Ej{c}}}}}{}}0000{hEl}0000{ce{}{}}0000{{}c{}}0000{h{{Bn{{h{c}}}}}{}}0000{{{h{lFh}}Ff{h{lBb}}}C`}{{{h{En}}{h{Cb}}}{{Bn{Bd}}}}{{EnF`}En}{{F`c}F`{{Eb{Fb}}}}{{FdFl}Fb}{{EncBd}En{{Eb{Eh}}}}````","D":"Kf","p":[[10,"TransformMatrix",881],[5,"Rotation",0],[5,"Joint",0],[1,"reference"],[10,"Any",882],[0,"mut"],[5,"BoneId",0],[5,"BoneAxis",0],[5,"BakedParameters",883],[10,"CastFrom",884],[5,"Vector",0],[6,"BoneKind",0],[5,"JointId",0],[6,"BoneEnd",0],[1,"unit"],[6,"Ordering",885],[5,"Skeleton",0],[1,"f32"],[1,"usize"],[6,"Result",886],[10,"Deserializer",887],[5,"Bone",0],[6,"Option",888],[1,"bool"],[1,"str"],[5,"Formatter",889],[8,"Result",889],[5,"WidgetContext",890],[5,"Error",889],[5,"LabeledBoneKind",0],[1,"tuple"],[10,"Hasher",891],[5,"Box",892],[5,"Arc",893],[5,"Rc",894],[6,"ReadOnly",895],[6,"Value",895],[17,"Output"],[10,"FnMut",896],[5,"ZeroToOne",897],[10,"Into",898],[10,"Serializer",899],[5,"SmolStr",900],[5,"String",901],[5,"OutOfBounds",902],[5,"TypeId",882],[5,"Animation",616],[5,"Frame",616],[5,"Change",616],[6,"ChangeKind",616],[5,"Duration",903],[5,"RunningAnimation",616],[6,"Cow",904],[6,"StandardEasing",905],[15,"Jointed",612],[15,"Rigid",612],[15,"Bone",877],[15,"Joint",877]],"r":[],"b":[[251,"impl-Display-for-Rotation"],[252,"impl-Debug-for-Rotation"],[312,"impl-Index%3CJointId%3E-for-Skeleton"],[313,"impl-Index%3CBoneId%3E-for-Skeleton"],[314,"impl-IndexMut%3CJointId%3E-for-Skeleton"],[315,"impl-IndexMut%3CBoneId%3E-for-Skeleton"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAABYDFQAQAAsAHQAsAE0AXwCuAB0AzQAVAOUAEgD6AAwAEgE1AFMBgQDbAQAA3gEAAOIBAwDqAQkA+wEBAP4BBgAGAgEACQJXAGkCbgDcAgAA3gIUAPgCeQA="}]\ -]')); +var searchIndex = new Map(JSON.parse('[["FunnyBones",{"t":"PPFFGFONNNNHNNNNNNNNNNNNNNNNNHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOHNOHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Animation","Bones","ChangeAggregator","EditingSkeleton","Mode","SkeletalBone","a_bones","adapt_into_using","","","","add_bones_to_skeleton","arrays_from","","","","arrays_into","","","","as_any","","","","as_any_mut","","","","as_bone_kind","bone_editor","bone_property_editor","bones_editor","borrow","","","","borrow_mut","","","","cam16_into_unclamped","","","","cast","","","","cast_into","","","","clone","","","","clone_into","","","","clone_to_uninit","","","","components_from","","","","connected_bones","default","","","deref","","","","deref_mut","","","","desired_end","downcast","","","","drop","","","","eq","","","equivalent","","","find_bone","find_bone_in","find_joint","find_joint_in","fmt","","","","from","","","","from_angle","","","","from_cast","","","","from_stimulus","","","","init","","","","into","","","","into_angle","","","","into_any","","","","into_any_arc","","","","into_any_rc","","","","into_cam16_unclamped","","","","into_color","","","","into_color_unclamped","","","","into_components","into_read_only","","","","into_stimulus","","","","into_value","","","","","","","","inverse","joint_angle","joint_label","jointed","label","length","main","new","root","skeleton_editor","to_owned","","","","try_components_into","","","","try_from","","","","try_into","","","","try_into_color","","","","type_id","","","","uints_from","","","","uints_into","","","","upcast","","","","watch"],"q":[[0,"FunnyBones"],[219,"palette::chromatic_adaptation"],[220,"funnybones"],[221,"alloc::vec"],[222,"cushy::value"],[223,"core::any"],[224,"cushy::widget"],[225,"palette::cam16::parameters"],[226,"intentional::cast"],[227,"core::option"],[228,"core::ops::control_flow"],[229,"core::fmt"],[230,"alloc::boxed"],[231,"alloc::sync"],[232,"alloc::rc"],[233,"anyhow"],[234,"core::cmp"],[235,"core::marker"],[236,"core::ops::function"],[237,"core::result"],[238,"palette::convert::try_from_into_color"]],"i":"Bd0````Bf1Ah1f`31203120312031200```31203120312031203120312031203120312003203120312003120312032033322223120312031203120312031203120312031203120312031203120312033120312033112200000000`12`3120312031203120312031203120312031201","f":"```````{eg{}{{b{c}}}{}}000{{d{l{{j{{h{f}}}}}}{l{nA`}}}Ab}{ce{}{}}000{{}c{}}000{l{{l{Ad}}}}000{{{l{n}}}{{l{nAd}}}}000{{{l{f}}}Af}{{f{l{Ah}}}{{`{Aj}}}}{{f{l{Ah}}Al}{{`{Aj}}}}{{{l{An}}{l{{j{{h{f}}}}}}{l{Ah}}}{{`{Aj}}}}{l{{l{c}}}{}}000{{{l{n}}}{{l{nc}}}{}}000{{{B`{c}}}e{}{}}000{{}e{}{{Bb{c}}}}000::::{{{l{Bd}}}Bd}{{{l{Ah}}}Ah}{{{l{Bf}}}Bf}{{{l{f}}}f}{{l{l{nc}}}Ab{}}000{lAb}000{ce{}{}}000`{{}Bd}{{}Bf}{{}f}{Bh{{l{c}}}{}}000{Bh{{l{nc}}}{}}000`????{BhAb}000{{{l{Bd}}{l{Bd}}}Al}{{{l{Bf}}{l{Bf}}}Al}{{{l{f}}{l{f}}}Al}{{l{l{c}}}Al{}}00{{{l{Bf}}Bj}{{Bl{f}}}}{{{l{{j{{h{f}}}}}}Bh}{{Bn{fBh}}}}{{{l{Bf}}C`}{{Bl{f}}}}1{{{l{Bd}}{l{nCb}}}Cd}{{{l{Ah}}{l{nCb}}}Cd}{{{l{Bf}}{l{nCb}}}Cd}{{{l{f}}{l{nCb}}}Cd}{cc{}}00000000000{ce{}{}}000{{}Bh}000{{}c{}}0000000{{{Cf{c}}}{{Cf{Ad}}}{}}000{{{Ch{c}}}{{Ch{Ad}}}{}}000{{{Cj{c}}}{{Cj{Ad}}}{}}000{{{B`{c}}}e{}{}}00044444444{{}{{Cl{cc}}}{}}{{}{{Cn{c}}}{}}0006666{{}{{D`{c}}}{}}{{}{{D`{{Bl{c}}}}}{}}100110``````{{}{{Db{Ab}}}}{e{{Cl{Ah{j{c}}}}}{DdDf}{{Dj{}{{Dh{c}}}}Df}}`{{{l{Bf}}{l{Ah}}}{{`{Aj}}}}{lc{}}000{{}{{Dl{c}}}{}}000{c{{Dl{e}}}{}{}}0001111{{}{{Dl{c{Dn{c}}}}}{}}000{lE`}000{ce{}{}}000{{}c{}}000{l{{Bl{{l{c}}}}}{}}000{{{l{Ah}}{l{{j{c}}}}}AbDf}","D":"Ab","p":[[10,"TransformMatrix",219],[5,"BoneAxis",220],[5,"SkeletalBone",0],[5,"Vec",221],[5,"Dynamic",222],[1,"reference"],[0,"mut"],[5,"Skeleton",220],[1,"unit"],[10,"Any",223],[5,"LabeledBoneKind",220],[5,"ChangeAggregator",0],[10,"MakeWidget",224],[1,"bool"],[1,"str"],[5,"BakedParameters",225],[10,"CastFrom",226],[6,"Mode",0],[5,"EditingSkeleton",0],[1,"usize"],[5,"BoneId",220],[6,"Option",227],[6,"ControlFlow",228],[5,"JointId",220],[5,"Formatter",229],[8,"Result",229],[5,"Box",230],[5,"Arc",231],[5,"Rc",232],[1,"tuple"],[6,"ReadOnly",222],[6,"Value",222],[8,"Result",233],[10,"PartialEq",234],[10,"Send",235],[17,"Output"],[10,"FnMut",236],[6,"Result",237],[5,"OutOfBounds",238],[5,"TypeId",223]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAANIAAwABAGYAbAAPAIAAWwA="}],["funnybones",{"t":"PFPFFGFGFFFPFTTPFFNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNONNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOFPFGFPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOCPPPPFGGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOO","n":["A","Angle","B","Bone","BoneAxis","BoneEnd","BoneId","BoneKind","Coordinate","Joint","JointId","Jointed","LabeledBoneKind","MAX","MIN","Rigid","Skeleton","Vector","adapt_into_using","","","","","","","","","","","","add","","","","add_assign","angle","animation","arrays_from","","","","","","","","","","","","arrays_into","","","","","","","","","","","","as_any","","","","","","","","","","","","as_any_mut","","","","","","","","","","","","as_rotation","axis_a","axis_b","bone","bones","borrow","","","","","","","","","","","","borrow_mut","","","","","","","","","","","","cam16_into_unclamped","","","","","","","","","","","","cast","","","","","","","","","","","","cast_into","","","","","","","","","","","","clone","","","","","","","","clone_into","","","","","","","","clone_to_uninit","","","","","","","","cmp","","compare","","","","components_from","","","","","","","","","","","","connections_to","cos","cushy","default","","","","degrees","deref","","","","","","","","","","","","deref_mut","","","","","","","","","","","","deserialize","","","","","","","","","desired_end","direction","div","downcast","","","","","","","","","","","","drop","","","","","","","","","","","","end","","entry_angle","eq","","","","","","","","","","","equivalent","","","","","","","","","","","","final_vector","find_bone_by_label","find_joint_by_label","fmt","","","","","","","","","","","","","from","","","","","","","","","","","","","","","from_angle","","","","","","","","","","","","from_cast","","","","","","","","","","","","from_components","from_parts","from_stimulus","","","","","","","","","","","","full_length","hash","","","","id","","index","","","","index_mut","","init","","","","","","","","","","","","into","","","","","","","","","","","","into_angle","","","","","","","","","","","","into_any","","","","","","","","","","","","into_any_arc","","","","","","","","","","","","into_any_rc","","","","","","","","","","","","into_cam16_unclamped","","","","","","","","","","","","into_color","","","","","","","","","","","","into_color_unclamped","","","","","","","","","","","","into_components","","","","","","","","","into_parts","into_read_only","","","","","","","","","","","","into_stimulus","","","","","","","","","","","","into_value","","","","","","","","","","","","","","","","","","","","","","","","inverse","","is_root","joints","kind","","label","","","lerp","","magnitude","","map","mul","neg","new","","","other_axis","partial_cmp","","","percent_between","push_bone","push_joint","radians","rotation","serialize","","","","","","","","","","","set_angle","set_desired_end","set_rotation","set_translation","sin","solve","solved_joint","start","sub","","","","sub_assign","to_degrees","to_owned","","","","","","","","to_progress","to_radians","to_smolstr","to_string","translation","try_components_into","","","","","","","","","","","","try_from","","","","","","","","","","","","try_into","","","","","","","","","","","","try_into_color","","","","","","","","","","","","type_id","","","","","","","","","","","","uints_from","","","","","","","","","","","","uints_into","","","","","","","","","","","","upcast","","","","","","","","","","","","vector_to","with_label","","x","y","end_length","inverse","length","start_length","Animation","Bone","Change","ChangeKind","Frame","Joint","RunningAnimation","adapt_into_using","","","","","arrays_from","","","","","arrays_into","","","","","as_any","","","","","as_any_mut","","","","","borrow","","","","","borrow_mut","","","","","cam16_into_unclamped","","","","","cast","","","","","cast_into","","","","","clone","","","","clone_into","","","","clone_to_uninit","","","","components_from","","","","","default","deref","","","","","","","deref_mut","","","","","","","deserialize","","","downcast","","","","","drop","","","","","duration","eq","","","","fmt","","","","from","","","","","","from_angle","","","","","from_cast","","","","","from_stimulus","","","","","init","","","","","insert","into","","","","","into_angle","","","","","into_any","","","","","into_any_arc","","","","","into_any_rc","","","","","into_cam16_unclamped","","","","","into_color","","","","","into_color_unclamped","","","","","into_components","","into_read_only","","","","","into_stimulus","","","","","into_value","","","","","","","","","","looping","new","push","push_change","remove","serialize","","","set_duration","set_variable","start","to_owned","","","","try_components_into","","","","","try_from","","","","","try_into","","","","","try_into_color","","","","","type_id","","","","","uints_from","","","","","uints_into","","","","","upcast","","","","","update","variable","with","with_change","with_easing","with_variable","bone","joint","position","rotation","skeleton_canvas","DesiredEnd","Joint","SetDesiredEnd","SetJointRotation","SkeletonCanvas","SkeletonMutation","Target","adapt_into_using","","","arrays_from","","","arrays_into","","","as_any","","","as_any_mut","","","borrow","","","borrow_mut","","","cam16_into_unclamped","","","cast","","","cast_into","","","clone","","clone_into","","clone_to_uninit","","components_from","","","deref","","","deref_mut","","","downcast","","","drop","","","eq","","equivalent","","","fmt","","","from","","","from_angle","","","from_cast","","","from_stimulus","","","hit_test","hover","init","","","into","","","into_angle","","","into_any","","","into_any_arc","","into_any_rc","","","into_cam16_unclamped","","","into_color","","","into_color_unclamped","","","into_components","","into_read_only","","","into_stimulus","","","into_value","","","","","","layout","make_widget","make_with_tag","mouse_down","mouse_drag","mouse_up","new","on_mutate","open","redraw","run","run_in","to_owned","","try_components_into","","","try_from","","","try_into","","","try_into_color","","","type_id","","","uints_from","","","uints_into","","","unhover","upcast","","","bone","end","joint","rotation"],"q":[[0,"funnybones"],[701,"funnybones::BoneKind"],[705,"funnybones::animation"],[966,"funnybones::animation::ChangeKind"],[970,"funnybones::cushy"],[971,"funnybones::cushy::skeleton_canvas"],[1130,"funnybones::cushy::skeleton_canvas::SkeletonMutation"],[1134,"palette::chromatic_adaptation"],[1135,"core::any"],[1136,"palette::cam16::parameters"],[1137,"intentional::cast"],[1138,"core::cmp"],[1139,"core::option"],[1140,"core::result"],[1141,"serde::de"],[1142,"core::fmt"],[1143,"cushy::context"],[1144,"core::hash"],[1145,"alloc::boxed"],[1146,"alloc::sync"],[1147,"alloc::rc"],[1148,"cushy::value"],[1149,"core::ops::function"],[1150,"cushy::animation"],[1151,"core::convert"],[1152,"serde::ser"],[1153,"core::ops::range"],[1154,"cushy::widgets::progress"],[1155,"smol_str"],[1156,"alloc::string"],[1157,"palette::convert::try_from_into_color"],[1158,"core::time"],[1159,"alloc::borrow"],[1160,"easing_function::easings"],[1161,"figures::units"],[1162,"figures::point"],[1163,"cursor_icon"],[1164,"cushy"],[1165,"figures::size"],[1166,"cushy::widget"],[1167,"cushy::window"],[1168,"winit::event"],[1169,"core::marker"],[1170,"winit::error"],[1171,"cushy::app"]],"i":"Bf`0````````Bb`h01``D`d2f4AhAfAjA`AdBd;779692`8796:543210;8796:543210;8796:543210;8796:543210;711458796:543210;8796:543210;8796:543210;8796:543210;8796:543210;796:410;796:410;796:410;1011008796:543210;59`796598796:543210;8796:543210;796:5410;3678796:543210;8796:543210;343796:543210;444111000;;;35579996:543210;8877966:543210;8796:543210;8796:543210;798796:543210;:410;325510558796:543210;8796:543210;8796:543210;8796:543210;8796:543210;8796:543210;8796:543210;8796:543210;8796:543210;7796:410;98796:543210;8796:543210;88779966::554433221100;;4;35383289676779762291095595796:543210;23559533779699796:410;999958796:543210;8796:543210;8796:543210;8796:543210;8796:543210;8796:543210;8796:543210;8796:543210;7:277Jf0Jh1`Fl```0`G`FfFhFj4321043210432104321043210432104321043210432104210421042104321042322110432211041043210432104121042104321004321043210432104321042321043210432104321043210432104321043210404321043210433221100443121210412221043210432104321043210432104321043210432104322142JjJl10`Gf0Gh0```Gj2102102102102102102102102102121212102102102102102121222021021021021021000210210210212102102102102121021021002211000000000000210210210210210210210210021Jn0K`0","f":"``````````````````{eg{}{{b{c}}}{}}00000000000{{dd}c{}}{{df}c{}}{{hh}c{}}{{fh}c{}}{{{l{jh}}h}n}{{{l{A`}}}h}`{ce{}{}}00000000000{{}c{}}00000000000{l{{l{Ab}}}}00000000000{{{l{j}}}{{l{jAb}}}}00000000000{dh}{AdAf}0`{{{l{Ah}}}{{l{{Al{Aj}}}}}}{l{{l{c}}}{}}00000000000{{{l{j}}}{{l{jc}}}{}}00000000000{{{An{c}}}e{}{}}00000000000{{}e{}{{B`{c}}}}00000000000999999999999{{{l{d}}}d}{{{l{h}}}h}{{{l{f}}}f}{{{l{Bb}}}Bb}{{{l{Af}}}Af}{{{l{Ad}}}Ad}{{{l{Bd}}}Bd}{{{l{Bf}}}Bf}{{l{l{jc}}}n{}}0000000{ln}0000000{{{l{Ad}}{l{Ad}}}Bh}{{{l{Bd}}{l{Bd}}}Bh}{{l{l{c}}}Bh{}}000{ce{}{}}00000000000{{{l{Ah}}Af}{{Bj{{l{{Al{Bd}}}}}}}}{hBl}`{{}d}{{}h}{{}f}{{}Ah}{Blh}{Bn{{l{c}}}{}}00000000000{Bn{{l{jc}}}{}}00000000000{c{{C`{d}}}Cb}{c{{C`{h}}}Cb}{c{{C`{f}}}Cb}{c{{C`{Bb}}}Cb}{c{{C`{Ah}}}Cb}{c{{C`{Af}}}Cb}{c{{C`{Ad}}}Cb}{c{{C`{Bd}}}Cb}{c{{C`{Bf}}}Cb}{{{l{Aj}}}{{Bj{f}}}}`{{dBl}c{}}{l{{l{c}}}{}}00000000000{Bnn}00000000000{{{l{Aj}}}d}`{{{l{Aj}}}h}{{{l{d}}{l{d}}}Cd}{{{l{h}}{l{h}}}Cd}{{{l{f}}{l{f}}}Cd}{{{l{Bb}}{l{Bb}}}Cd}{{{l{Ah}}{l{Ah}}}Cd}{{{l{Af}}{l{Af}}}Cd}{{{l{Aj}}{l{Aj}}}Cd}{{{l{A`}}{l{A`}}}Cd}{{{l{Ad}}{l{Ad}}}Cd}{{{l{Bd}}{l{Bd}}}Cd}{{{l{Bf}}{l{Bf}}}Cd}{{l{l{c}}}Cd{}}00000000000{{{l{Aj}}}f}{{{l{Ah}}{l{Cf}}}{{Bj{Ad}}}}{{{l{Ah}}{l{Cf}}}{{Bj{Bd}}}}{{{l{d}}{l{jCh}}}Cj}{{{l{h}}{l{jCh}}}Cj}{{l{l{Cl}}{l{jCh}}}{{C`{nCn}}}}1{{{l{f}}{l{jCh}}}Cj}{{{l{Bb}}{l{jCh}}}Cj}{{{l{Ah}}{l{jCh}}}Cj}{{{l{Af}}{l{jCh}}}Cj}{{{l{Aj}}{l{jCh}}}Cj}{{{l{A`}}{l{jCh}}}Cj}{{{l{Ad}}{l{jCh}}}Cj}{{{l{Bd}}{l{jCh}}}Cj}{{{l{Bf}}{l{jCh}}}Cj}{BbD`}{cc{}}0{fd}11{df}22222222222222222222222222222222{{{Db{BlBl}}}d}{Bjc{}}{ce{}{}}00000000000{{{l{Bb}}}Bl}{{{l{Af}}{l{jc}}}nDd}{{{l{Ad}}{l{jc}}}nDd}{{{l{Bd}}{l{jc}}}nDd}{{{l{Bf}}{l{jc}}}nDd}{{{l{Aj}}}Ad}{{{l{A`}}}Bd}{{{l{Ah}}Bd}{{l{c}}}{}}{{{l{Ah}}Ad}{{l{c}}}{}}{AdBn}{BdBn}{{{l{jAh}}Ad}{{l{jc}}}{}}{{{l{jAh}}Bd}{{l{jc}}}{}}{{}Bn}00000000000{{}c{}}00000000000000000000000{{{Df{c}}}{{Df{Ab}}}{}}00000000000{{{Dh{c}}}{{Dh{Ab}}}{}}00000000000{{{Dj{c}}}{{Dj{Ab}}}{}}00000000000{{{An{c}}}e{}{}}00000000000444444444444444444444444{{}{{Db{cc}}}{}}{d{{Db{BlBl}}}}1111111{{}{{Db{Bj}}}}{{}{{Dl{c}}}{}}00000000000888888888888{{}{{Dn{{Bj{c}}}}}{}}{{}{{Dn{c}}}{}}1010100110101001100101{AfAf}{BfBf}{{{l{Aj}}}Cd}{{{l{Ah}}}{{l{{Al{A`}}}}}}{{{l{Aj}}}{{l{Bb}}}}`{{{l{Aj}}}{{l{Cf}}}}{{{l{A`}}}{{l{Cf}}}}`{{{l{h}}{l{h}}Bl}h}{{{l{f}}{l{f}}Bl}f}{{{l{d}}}Bl}`{{dc}d{{Eb{Bl}{{E`{Bl}}}}}}{{dBl}c{}}{hc{}}{{BlBl}d}{{Blh}f}{{hAfAf}A`}{{{l{A`}}Af}Af}{{{l{h}}{l{h}}}{{Bj{Bh}}}}{{{l{Ad}}{l{Ad}}}{{Bj{Bh}}}}{{{l{Bd}}{l{Bd}}}{{Bj{Bh}}}}{{{l{h}}{l{h}}{l{h}}}Ed}{{{l{jAh}}c}Ad{{Ef{D`}}}}{{{l{jAh}}A`}Bd}{Blh}{{{l{Ah}}}h}{{{l{d}}c}C`Eh}{{{l{h}}c}C`Eh}{{{l{f}}c}C`Eh}{{{l{Bb}}c}C`Eh}{{{l{Ah}}c}C`Eh}{{{l{Af}}c}C`Eh}{{{l{Aj}}c}C`Eh}{{{l{A`}}c}C`Eh}{{{l{Ad}}c}C`Eh}{{{l{Bd}}c}C`Eh}{{{l{Bf}}c}C`Eh}{{{l{jA`}}h}n}{{{l{jAj}}{Bj{f}}}n}{{{l{jAh}}h}n}{{{l{jAh}}d}n}{hBl}{{{l{jAh}}}n}{{{l{Aj}}}{{Bj{d}}}}{{{l{Aj}}}d}{{dd}c{}}{{df}c{}}{{hh}c{}}{{fh}c{}}{{{l{jh}}h}n}8{lc{}}0000000{{l{Bj{{Ej{l}}}}}El}:{lEn}{lF`}{{{l{Ah}}}d}{{}{{C`{c}}}{}}00000000000{c{{C`{e}}}{}{}}00000000000111111111111{{}{{C`{c{Fb{c}}}}}{}}00000000000{lFd}00000000000{ce{}{}}00000000000{{}c{}}00000000000{l{{Bj{{l{c}}}}}{}}00000000000{{dd}f}{{Bbc}D`{{Ef{F`}}}}{{A`c}A`{{Ef{F`}}}}`````````````{eg{}{{b{c}}}{}}00006666655555{l{{l{Ab}}}}0000{{{l{j}}}{{l{jAb}}}}0000{l{{l{c}}}{}}0000{{{l{j}}}{{l{jc}}}{}}0000{{{An{c}}}e{}{}}0000{{}e{}{{B`{c}}}}0000;;;;;{{{l{Ff}}}Ff}{{{l{Fh}}}Fh}{{{l{Fj}}}Fj}{{{l{Fl}}}Fl}{{l{l{jc}}}n{}}000{ln}000{ce{}{}}0000{{}Ff}{Bn{{l{c}}}{}}{{{l{Ff}}}{{l{c}}}{}}11{{{l{Fh}}}{{l{c}}}{}}22{Bn{{l{jc}}}{}}{{{l{jFf}}}{{l{jc}}}{}}1{{{l{jFh}}}{{l{jc}}}{}}222{c{{C`{Fh}}}Cb}{c{{C`{Fj}}}Cb}{c{{C`{Fl}}}Cb}{l{{l{c}}}{}}0000{Bnn}0000{{{l{Fh}}}Fn}{{{l{Ff}}{l{Ff}}}Cd}{{{l{Fh}}{l{Fh}}}Cd}{{{l{Fj}}{l{Fj}}}Cd}{{{l{Fl}}{l{Fl}}}Cd}{{{l{Ff}}{l{jCh}}}Cj}{{{l{Fh}}{l{jCh}}}Cj}{{{l{Fj}}{l{jCh}}}Cj}{{{l{Fl}}{l{jCh}}}Cj}{cc{}}00{FlFj}111111111111{ce{}{}}0000{{}Bn}0000{{{l{jFf}}BnFh}n}{{}c{}}000000000{{{Df{c}}}{{Df{Ab}}}{}}0000{{{Dh{c}}}{{Dh{Ab}}}{}}0000{{{Dj{c}}}{{Dj{Ab}}}{}}0000{{{An{c}}}e{}{}}00004444444444{{}{{Db{cc}}}{}}0{{}{{Dl{c}}}{}}000066666{{}{{Dn{{Bj{c}}}}}{}}{{}{{Dn{c}}}{}}10010101{G`G`}{FnFh}{{{l{jFf}}Fh}n}{{{l{jFh}}c}n{{Ef{Fj}}}}{{{l{jFf}}Bn}Fh}{{{l{Fh}}c}C`Eh}{{{l{Fj}}c}C`Eh}{{{l{Fl}}c}C`Eh}{{{l{jFh}}Fn}n}{{{l{jFf}}cBl}n{{Ef{{Gb{Cf}}}}}}{{{l{Ff}}}G`}{lc{}}000{{}{{C`{c}}}{}}0000{c{{C`{e}}}{}{}}000011111{{}{{C`{c{Fb{c}}}}}{}}0000{lFd}0000{ce{}{}}0000{{}c{}}0000{l{{Bj{{l{c}}}}}{}}0000{{{l{jG`}}Fn{l{jAh}}}Cd}{{{l{Ff}}{l{Cf}}}{{Bj{Bl}}}}{{FfFh}Ff}{{Fhc}Fh{{Ef{Fj}}}}{{FlGd}Fj}{{FfcBl}Ff{{Ef{F`}}}}````````````{eg{}{{b{c}}}{}}00999888{l{{l{Ab}}}}00{{{l{j}}}{{l{jAb}}}}00{l{{l{c}}}{}}00{{{l{j}}}{{l{jc}}}{}}00{{{An{c}}}e{}{}}00{{}e{}{{B`{c}}}}00>>>{{{l{Gf}}}Gf}{{{l{Gh}}}Gh}{{l{l{jc}}}n{}}0{ln}0{ce{}{}}00{Bn{{l{c}}}{}}00{Bn{{l{jc}}}{}}00:::{Bnn}00{{{l{Gf}}{l{Gf}}}Cd}{{{l{Gh}}{l{Gh}}}Cd}{{l{l{c}}}Cd{}}00{{{l{Gj}}{l{jCh}}}Cj}{{{l{Gf}}{l{jCh}}}Cj}{{{l{Gh}}{l{jCh}}}Cj}{cc{}}00000000:::{{{l{jGj}}{Gn{Gl}}{l{jH`}}}Cd}{{{l{jGj}}{Gn{Gl}}{l{jH`}}}{{Bj{Hb}}}}{{}Bn}00{{}c{}}00000{{{Df{c}}}{{Df{Ab}}}{}}00{{{Dh{c}}}{{Dh{Ab}}}{}}0{{{Dj{c}}}{{Dj{Ab}}}{}}00{{{An{c}}}e{}{}}00444444{{}{{Db{cc}}}{}}0{{}{{Dl{c}}}{}}00666{{}{{Dn{{Bj{c}}}}}{}}{{}{{Dn{c}}}{}}0110{{{l{jGj}}{Hf{Hd}}{l{jHh}}}{{Hf{Hj}}}}{{}Hl}{HnHl}{{{l{jGj}}{Gn{Gl}}I`Ib{l{jH`}}}Id}{{{l{jGj}}{Gn{Gl}}I`Ib{l{jH`}}}n}{{{l{jGj}}{Bj{{Gn{Gl}}}}I`Ib{l{jH`}}}n}{{{If{Ah}}}Gj}{{Gjc}Gj{{Eb{Gh}}Ih}}{{{l{jc}}}{{C`{{Bj{Ij}}Il}}}{InJ`}}{{{l{jGj}}{l{jJb}}}n}{{}{{C`{nIl}}}}{Jd{{C`{nIl}}}}{lc{}}0{{}{{C`{c}}}{}}00{c{{C`{e}}}{}{}}00111{{}{{C`{c{Fb{c}}}}}{}}00{lFd}00{ce{}{}}00{{}c{}}00{{{l{jGj}}{l{jH`}}}n}{l{{Bj{{l{c}}}}}{}}00````","D":"Od","p":[[10,"TransformMatrix",1134],[5,"Coordinate",0],[5,"Vector",0],[5,"Angle",0],[0,"mut"],[1,"reference"],[1,"unit"],[5,"Joint",0],[10,"Any",1135],[5,"BoneId",0],[5,"BoneAxis",0],[5,"Skeleton",0],[5,"Bone",0],[1,"slice"],[5,"BakedParameters",1136],[10,"CastFrom",1137],[6,"BoneKind",0],[5,"JointId",0],[6,"BoneEnd",0],[6,"Ordering",1138],[6,"Option",1139],[1,"f32"],[1,"usize"],[6,"Result",1140],[10,"Deserializer",1141],[1,"bool"],[1,"str"],[5,"Formatter",1142],[8,"Result",1142],[5,"WidgetContext",1143],[5,"Error",1142],[5,"LabeledBoneKind",0],[1,"tuple"],[10,"Hasher",1144],[5,"Box",1145],[5,"Arc",1146],[5,"Rc",1147],[6,"ReadOnly",1148],[6,"Value",1148],[17,"Output"],[10,"FnMut",1149],[5,"ZeroToOne",1150],[10,"Into",1151],[10,"Serializer",1152],[5,"RangeInclusive",1153],[6,"Progress",1154],[5,"SmolStr",1155],[5,"String",1156],[5,"OutOfBounds",1157],[5,"TypeId",1135],[5,"Animation",705],[5,"Frame",705],[5,"Change",705],[6,"ChangeKind",705],[5,"Duration",1158],[5,"RunningAnimation",705],[6,"Cow",1159],[6,"StandardEasing",1160],[6,"Target",971],[6,"SkeletonMutation",971],[5,"SkeletonCanvas",971],[5,"Px",1161],[5,"Point",1162],[5,"EventContext",1143],[6,"CursorIcon",1163],[6,"ConstraintLimit",1164],[5,"Size",1165],[5,"LayoutContext",1143],[5,"UPx",1161],[5,"WidgetInstance",1166],[5,"WidgetTag",1166],[6,"DeviceId",1167],[6,"MouseButton",1168],[8,"EventHandling",1166],[5,"Dynamic",1148],[10,"Send",1169],[5,"WindowHandle",1167],[6,"EventLoopError",1170],[10,"Application",1171],[10,"Sized",1169],[5,"GraphicsContext",1143],[5,"PendingApp",1171],[15,"Jointed",701],[15,"Rigid",701],[15,"Bone",966],[15,"Joint",966],[15,"SetDesiredEnd",1130],[15,"SetJointRotation",1130]],"r":[],"b":[[30,"impl-Add-for-Coordinate"],[31,"impl-Add%3CVector%3E-for-Coordinate"],[290,"impl-Debug-for-Angle"],[292,"impl-Display-for-Angle"],[362,"impl-Index%3CJointId%3E-for-Skeleton"],[363,"impl-Index%3CBoneId%3E-for-Skeleton"],[366,"impl-IndexMut%3CBoneId%3E-for-Skeleton"],[367,"impl-IndexMut%3CJointId%3E-for-Skeleton"],[581,"impl-Sub-for-Coordinate"],[582,"impl-Sub%3CVector%3E-for-Coordinate"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAPQDHQATABAAJQAwAFsAZQDEAAMAyQAgAOwAGAAIARYAIgENADIBAAA1AQAAPgElAGUBAwBrAQEAbwENAIkBjQAgAgEAJQIBACsCAwAzAgoARgIEAEwCCABWAgEAWQJfAMICbgA0AwAANwMUAFEDvAARBA0AIgRMAA=="}]]')); if (typeof exports !== 'undefined') exports.searchIndex = searchIndex; else if (window.initSearch) window.initSearch(searchIndex); +//{"start":39,"fragment_lengths":[4360,17353]} \ No newline at end of file diff --git a/main/search.desc/FunnyBones/FunnyBones-desc-0-.js b/main/search.desc/FunnyBones/FunnyBones-desc-0-.js new file mode 100644 index 0000000..7960dd8 --- /dev/null +++ b/main/search.desc/FunnyBones/FunnyBones-desc-0-.js @@ -0,0 +1 @@ +searchState.loadedDescShard("FunnyBones", 0, "The FunnyBones 2D Animation Editor.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).") \ No newline at end of file diff --git a/main/search.desc/funnybones/funnybones-desc-0-.js b/main/search.desc/funnybones/funnybones-desc-0-.js index e700f1f..dd03ac7 100644 --- a/main/search.desc/funnybones/funnybones-desc-0-.js +++ b/main/search.desc/funnybones/funnybones-desc-0-.js @@ -1 +1 @@ -searchState.loadedDescShard("funnybones", 0, "FunnyBones is considered experimental and unsupported …\nThe first end of a bone.\nThe second end of a bone.\nA bone in a Skeleton.\nA specific end of a specific bone.\nA specific end of a Bone.\nThe unique ID of a Bone in a Skeleton.\nA representation of a bone structure inside of a Skeleton.\nA connection between two bones.\nThe unique ID of a Joint in a Skeleton.\nTwo bones connected with a joint that automatically …\nA BoneKind with an associated label.\nA single bone of a fixed length.\nA value representing a rotation between no rotation and a …\nA collection of Bones. connected by Joints.\nA two dimensionsional offset/measurement.\nReturns the rotation of this joint.\nReturns the first axis of this bone.\nReturns the second axis of this bone.\nThe unique id of the bone of this axis.\nReturns a rotation representing the given degrees.\nReturns the location this bone is being aimed towards.\nReturns the solved end position of this bone.\nThe end of the bone being referenced.\nFinds an existing Bone by its label.\nFinds an existing Joint by its label.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the opposite axis on the same bone.\nReturns the opposite end of self.\nThe bone to create.\nReturns the label this bone was created with.\nReturns the label of this joint.\nThe label of the bone.\nReturns the magnitude of this vector.\nReturns the result of mapping x and y to f.\nReturns a new vector from the x and y values.\nReturns a new joint formed by joining bone_a and bone_b at …\nGiven axis is one of the two connections in this joint, …\nCreates a new Bone into the skeleton. Returns the unique …\nCreates a new Joint in the skeleton, connecting two bones …\nReturns a rotation representing the given radians.\nReturns the base rotation being applied to the entire …\nSets the angle to form between these joints.\nSets the location to aim the end of this bone towards.\nSets a base rotation to apply to the entire skeleton.\nSets a translation to be applied to the entire skeleton.\nUpdates the solved positions of all bones in this skeleton …\nIf this is a BoneKind::Jointed bone, returns the solved …\nReturns the solved start position of this bone.\nReturns this rotation represented in degrees.\nReturns this rotation represented in radians.\nReturns the translation applied to the entire skeleton.\nAttaches a label to this bone when pushed into a skeleton.\nLabels this joint and returns self.\nThe x-axis component of this vector.\nThe y-axis component of this vector.\nThe length of the bone connected furthes from the root of …\nThe bend of the simulated joint always goes in one of two …\nThe length of the bone.\nThe length of the bone connected closest to the root of the\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).") \ No newline at end of file +searchState.loadedDescShard("funnybones", 0, "FunnyBones is considered experimental and unsupported …\nThe first end of a bone.\nA value representing a direction.\nThe second end of a bone.\nA bone in a Skeleton.\nA specific end of a specific bone.\nA specific end of a Bone.\nThe unique ID of a Bone in a Skeleton.\nA representation of a bone structure inside of a Skeleton.\nA two dimensionsional offset/measurement.\nA connection between two bones.\nThe unique ID of a Joint in a Skeleton.\nTwo bones connected with a joint that automatically …\nA BoneKind with an associated label.\nThe maximum rotation represented by this type.\nThe minimum rotation represented by this type.\nA single bone of a fixed length.\nA collection of Bones. connected by Joints.\nA 2D Euclidean vector.\nReturns the rotation of this joint.\nReturns the angle formed a line passing through 0,0 …\nReturns the first axis of this bone.\nReturns the second axis of this bone.\nThe unique id of the bone of this axis.\nReturns the list of bones in this skeleton.\nReturns a list of joints connected to a specific bone axis.\nReturns the cosine of this angle.\nWidgets for editing and rendering skeletons.\nReturns a rotation representing the given degrees.\nReturns the location this bone is being aimed towards.\nThe direction the vector is heading.\nReturns the solved end position of this bone.\nThe end of the bone being referenced.\nReturns the angle of the previous bone segment connecting …\nReturns a vector representing the final segment in this …\nFinds an existing Bone by its label.\nFinds an existing Joint by its label.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the full length of this bone.\nReturns the unique id of this bone.\nReturns the unique id of this joint.\nReturns the index of this bone within the skeleton.\nReturns the index of this joint within the skeleton.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the opposite axis on the same bone.\nReturns the opposite end of self.\nReturns true if this bone is the root of the skeleton.\nReturns the list of joints in this skeleton.\nReturns the kind of this bone.\nThe bone to create.\nReturns the label this bone was created with.\nReturns the label of this joint.\nThe label of the bone.\nReturns the magnitude of this vector.\nThe length of the vector.\nReturns the result of mapping x and y to f.\nReturns a new vector from the x and y values.\nReturns a new vector for the given magnitude and direction.\nReturns a new joint formed by joining bone_a and bone_b at …\nGiven axis is one of the two connections in this joint, …\nCreates a new Bone into the skeleton. Returns the unique …\nCreates a new Joint in the skeleton, connecting two bones …\nReturns a rotation representing the given radians.\nReturns the base rotation being applied to the entire …\nSets the angle to form between these joints.\nSets a relative position to aim the end of this bone …\nSets a base rotation to apply to the entire skeleton.\nSets a translation to be applied to the entire skeleton.\nReturns the sine of this angle.\nUpdates the solved positions of all bones in this skeleton …\nIf this is a BoneKind::Jointed bone, returns the solved …\nReturns the solved start position of this bone.\nReturns this rotation represented in degrees.\nReturns this rotation represented in radians.\nReturns the translation applied to the entire skeleton.\nReturns a vector pointing from self to other.\nAttaches a label to this bone when pushed into a skeleton.\nLabels this joint and returns self.\nThe x-axis component of this vector.\nThe y-axis component of this vector.\nThe length of the bone connected furthes from the root of …\nThe bend of the simulated joint always goes in one of two …\nThe length of the bone.\nThe length of the bone connected closest to the root of the\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).") \ No newline at end of file diff --git a/main/settings.html b/main/settings.html index 64b7f77..3df7636 100644 --- a/main/settings.html +++ b/main/settings.html @@ -1 +1 @@ -Settings

Rustdoc settings

Back
\ No newline at end of file +Settings

Rustdoc settings

Back
\ No newline at end of file diff --git a/main/src-files.js b/main/src-files.js index 1728f46..768fc28 100644 --- a/main/src-files.js +++ b/main/src-files.js @@ -1,4 +1,3 @@ -var srcIndex = new Map(JSON.parse('[\ -["funnybones",["",[],["animation.rs","lib.rs","serde.rs"]]]\ -]')); +var srcIndex = new Map(JSON.parse('[["FunnyBones",["",[],["funnybones.rs"]]],["funnybones",["",[["cushy",[],["skeleton_canvas.rs"]]],["animation.rs","cushy.rs","lib.rs","serde.rs"]]]]')); createSrcSidebar(); +//{"start":36,"fragment_lengths":[40,106]} \ No newline at end of file diff --git a/main/src/FunnyBones/funnybones.rs.html b/main/src/FunnyBones/funnybones.rs.html new file mode 100644 index 0000000..6f5d5c1 --- /dev/null +++ b/main/src/FunnyBones/funnybones.rs.html @@ -0,0 +1,849 @@ +funnybones.rs - source
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
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+
//! The FunnyBones 2D Animation Editor.
+
+use std::ops::ControlFlow;
+
+use cushy::{
+    value::{Destination, Dynamic, DynamicRead, ForEach, Source, Switchable},
+    widget::{MakeWidget, WidgetList},
+    widgets::{checkbox::Checkable, input::InputValue, slider::Slidable, Space},
+    Run,
+};
+use funnybones::{
+    cushy::skeleton_canvas::{SkeletonCanvas, SkeletonMutation},
+    Angle, BoneAxis, BoneId, BoneKind, Joint, JointId, LabeledBoneKind, Skeleton, Vector,
+};
+
+#[derive(Default, Eq, PartialEq, Debug, Clone, Copy)]
+enum Mode {
+    #[default]
+    Bones,
+    Animation,
+}
+
+#[derive(Debug, Clone)]
+struct ChangeAggregator(Dynamic<usize>);
+
+impl ChangeAggregator {
+    pub fn new<F, T>(mut when_changed: F) -> (Self, Dynamic<T>)
+    where
+        F: FnMut() -> T + Send + 'static,
+        T: PartialEq + Send + 'static,
+    {
+        let counter = Dynamic::new(0);
+        let result = counter.map_each(move |_| when_changed());
+
+        (Self(counter), result)
+    }
+
+    pub fn watch<T>(&self, other: &Dynamic<T>)
+    where
+        T: Send + 'static,
+    {
+        let counter = self.0.clone();
+        other
+            .for_each_subsequent_generational(move |guard| {
+                drop(guard);
+                *counter.lock() += 1;
+            })
+            .persist();
+    }
+}
+
+// TODO we want joint labels here somehow
+fn add_bones_to_skeleton(
+    connected_to: BoneAxis,
+    bones: &Dynamic<Vec<SkeletalBone>>,
+    skeleton: &mut Skeleton,
+) {
+    let bones = bones.read();
+    for bone in &*bones {
+        let new_bone = skeleton.push_bone(bone.as_bone_kind());
+        if let Some(desired_end) = bone.desired_end.get() {
+            skeleton[new_bone].set_desired_end(Some(desired_end));
+        }
+        skeleton.push_joint(
+            Joint::new(bone.joint_angle.get(), connected_to, new_bone.axis_a())
+                .with_label(bone.joint_label.get()),
+        );
+        add_bones_to_skeleton(new_bone.axis_b(), &bone.connected_bones, skeleton);
+    }
+}
+
+fn main() -> anyhow::Result<()> {
+    let editing_skeleton = EditingSkeleton::default();
+    let (watcher, skeleton) = ChangeAggregator::new({
+        let editing_skeleton = editing_skeleton.clone();
+        move || {
+            let mut skeleton = Skeleton::default();
+            let root = skeleton.push_bone(editing_skeleton.root.as_bone_kind());
+            add_bones_to_skeleton(
+                root.axis_b(),
+                &editing_skeleton.root.connected_bones,
+                &mut skeleton,
+            );
+            add_bones_to_skeleton(root.axis_a(), &editing_skeleton.a_bones, &mut skeleton);
+            skeleton
+        }
+    });
+    let bones_editor = skeleton_editor(&editing_skeleton, &watcher).make_widget();
+
+    let mode = Dynamic::<Mode>::default();
+
+    [(Mode::Bones, "Bones"), (Mode::Animation, "Animation")]
+        .into_iter()
+        .map(|(selected, label)| mode.new_select(selected, label))
+        .collect::<WidgetList>()
+        .into_columns()
+        .centered()
+        .and(
+            mode.switcher(move |mode, _mode_dynamic| match mode {
+                Mode::Animation => "Animation Editor".make_widget(),
+                Mode::Bones => bones_editor.clone(),
+            })
+            .expand(),
+        )
+        .into_rows()
+        .expand()
+        .and(
+            SkeletonCanvas::new(skeleton)
+                .on_mutate({
+                    move |mutation| match mutation {
+                        SkeletonMutation::SetDesiredEnd { bone, end } => editing_skeleton
+                            .find_bone(bone)
+                            .expect("missing bone")
+                            .desired_end
+                            .set(Some(end)),
+                        SkeletonMutation::SetJointRotation { joint, rotation } => editing_skeleton
+                            .find_joint(joint)
+                            .expect("missing joint")
+                            .joint_angle
+                            .set(rotation),
+                    }
+                })
+                .expand(),
+        )
+        .into_columns()
+        .run()?;
+    Ok(())
+}
+
+#[derive(Clone, Debug, PartialEq, Default)]
+struct EditingSkeleton {
+    root: SkeletalBone,
+    a_bones: Dynamic<Vec<SkeletalBone>>,
+}
+
+impl EditingSkeleton {
+    fn find_bone(&self, id: BoneId) -> Option<SkeletalBone> {
+        let mut index = id.index();
+        if index == 0 {
+            Some(self.root.clone())
+        } else {
+            index -= 1;
+            match Self::find_bone_in(&self.root.connected_bones, index) {
+                ControlFlow::Continue(index) => match Self::find_bone_in(&self.a_bones, index) {
+                    ControlFlow::Break(bone) => Some(bone),
+                    ControlFlow::Continue(_) => None,
+                },
+                ControlFlow::Break(bone) => Some(bone),
+            }
+        }
+    }
+
+    fn find_bone_in(
+        bones: &Dynamic<Vec<SkeletalBone>>,
+        mut index: usize,
+    ) -> ControlFlow<SkeletalBone, usize> {
+        let bones = bones.read();
+        for bone in &*bones {
+            if index == 0 {
+                return ControlFlow::Break(bone.clone());
+            }
+
+            index -= 1;
+            index = Self::find_bone_in(&bone.connected_bones, index)?;
+        }
+
+        ControlFlow::Continue(index)
+    }
+
+    fn find_joint(&self, id: JointId) -> Option<SkeletalBone> {
+        let index = id.index();
+        match Self::find_joint_in(&self.root.connected_bones, index) {
+            ControlFlow::Continue(index) => match Self::find_joint_in(&self.a_bones, index) {
+                ControlFlow::Break(bone) => Some(bone),
+                ControlFlow::Continue(_) => None,
+            },
+            ControlFlow::Break(bone) => Some(bone),
+        }
+    }
+
+    fn find_joint_in(
+        bones: &Dynamic<Vec<SkeletalBone>>,
+        mut index: usize,
+    ) -> ControlFlow<SkeletalBone, usize> {
+        let bones = bones.read();
+        for bone in &*bones {
+            if index == 0 {
+                return ControlFlow::Break(bone.clone());
+            }
+
+            index -= 1;
+            index = Self::find_bone_in(&bone.connected_bones, index)?;
+        }
+
+        ControlFlow::Continue(index)
+    }
+}
+
+#[derive(Clone, Debug, PartialEq)]
+struct SkeletalBone {
+    label: Dynamic<String>,
+    joint_label: Dynamic<String>,
+    joint_angle: Dynamic<Angle>,
+    length: Dynamic<f32>,
+    jointed: Dynamic<Option<f32>>,
+    inverse: Dynamic<bool>,
+    desired_end: Dynamic<Option<Vector>>,
+    connected_bones: Dynamic<Vec<SkeletalBone>>,
+}
+
+impl SkeletalBone {
+    pub fn as_bone_kind(&self) -> LabeledBoneKind {
+        match self.jointed.get() {
+            Some(joint) => BoneKind::Jointed {
+                start_length: self.length.get(),
+                end_length: joint,
+                inverse: self.inverse.get(),
+            },
+            None => BoneKind::Rigid {
+                length: self.length.get(),
+            },
+        }
+        .with_label(self.label.get())
+    }
+}
+
+impl Default for SkeletalBone {
+    fn default() -> Self {
+        Self {
+            joint_label: Dynamic::default(),
+            joint_angle: Dynamic::new(Angle::degrees(90.)),
+            label: Dynamic::default(),
+            length: Dynamic::new(1.),
+            jointed: Dynamic::default(),
+            inverse: Dynamic::default(),
+            desired_end: Dynamic::default(),
+            connected_bones: Dynamic::default(),
+        }
+    }
+}
+
+fn skeleton_editor(skeleton: &EditingSkeleton, watcher: &ChangeAggregator) -> impl MakeWidget {
+    bone_property_editor(skeleton.root.clone(), watcher, true)
+        .and(bones_editor(
+            "Upper Root Bones",
+            &skeleton.root.connected_bones,
+            watcher,
+        ))
+        .and(bones_editor("Lower Root Bones", &skeleton.a_bones, watcher))
+        .into_rows()
+        .pad()
+        .vertical_scroll()
+}
+
+fn bones_editor(
+    label: &str,
+    bones: &Dynamic<Vec<SkeletalBone>>,
+    watcher: &ChangeAggregator,
+) -> impl MakeWidget {
+    watcher.watch(bones);
+    let bone_editors = Dynamic::new(
+        bones
+            .read()
+            .iter()
+            .map(|bone| bone_editor(bone.clone(), watcher).make_widget())
+            .collect::<WidgetList>(),
+    );
+    let collapsed = Dynamic::new(true);
+    let add = "+".into_button().on_click({
+        let bones = bones.clone();
+        let bone_editors = bone_editors.clone();
+        let watcher = watcher.clone();
+        let collapsed = collapsed.clone();
+        move |_| {
+            let new_bone = SkeletalBone::default();
+            bones.lock().push(new_bone.clone());
+            bone_editors.lock().push(bone_editor(new_bone, &watcher));
+            collapsed.set(false);
+        }
+    });
+    bone_editors
+        .into_rows()
+        .disclose()
+        .labelled_by(label.align_left().expand().and(add).into_columns())
+        .collapsed(collapsed)
+        .contain()
+}
+fn bone_editor(bone: SkeletalBone, watcher: &ChangeAggregator) -> impl MakeWidget {
+    let bones = bones_editor("Connected Bones", &bone.connected_bones, watcher);
+    bone_property_editor(bone, watcher, false)
+        .and(bones)
+        .into_rows()
+}
+
+#[allow(clippy::too_many_lines)]
+fn bone_property_editor(
+    bone: SkeletalBone,
+    watcher: &ChangeAggregator,
+    is_root: bool,
+) -> impl MakeWidget {
+    watcher.watch(&bone.joint_label);
+    watcher.watch(&bone.inverse);
+    watcher.watch(&bone.jointed);
+    watcher.watch(&bone.label);
+    watcher.watch(&bone.length);
+    watcher.watch(&bone.joint_angle);
+    watcher.watch(&bone.desired_end);
+    let (second, jointed) = if let Some(length) = bone.jointed.get() {
+        (length, true)
+    } else {
+        (1., false)
+    };
+    let jointed = Dynamic::new(jointed);
+
+    let first = Dynamic::new(bone.length.get().to_string());
+    let first_parsed = first.map_each(|s| s.parse::<f32>());
+    first_parsed
+        .for_each(move |result| {
+            let Ok(new_value) = result else { return };
+            bone.length.set(*new_value);
+        })
+        .persist();
+    let second = Dynamic::new(second.to_string());
+    let second_parsed = second.map_each(|s| s.parse::<f32>());
+    (&jointed, &second_parsed)
+        .for_each(move |(jointed, result)| {
+            if *jointed {
+                let Ok(new_value) = result else { return };
+                bone.jointed.set(Some(*new_value));
+            } else {
+                bone.jointed.set(None);
+            }
+        })
+        .persist();
+
+    let joint_label_editor = bone.joint_label.into_input().placeholder("Joint Name");
+    let label_editor = bone.label.into_input().placeholder("Bone Name");
+    let length_editor = first
+        .into_input()
+        .placeholder("Length")
+        .validation(first_parsed);
+
+    let jointed_editor = jointed.clone().into_checkbox("Jointed");
+
+    let rotation = bone.joint_angle.slider();
+
+    let joint_row = "Second Bone Segment Length"
+        .align_left()
+        .and(
+            second
+                .into_input()
+                .with_enabled(jointed.clone())
+                .validation(second_parsed),
+        )
+        .into_rows()
+        .fit_horizontally()
+        .align_top()
+        .expand()
+        .and(
+            bone.inverse
+                .into_checkbox("Inverse")
+                .with_enabled(jointed.clone())
+                .fit_horizontally(),
+        )
+        .and(Space::clear().expand_weighted(2))
+        .into_columns()
+        .make_widget();
+
+    let non_joint_row = "Joint Angle"
+        .align_left()
+        .and(rotation)
+        .into_rows()
+        .expand()
+        .and(Space::clear().expand_weighted(4))
+        .into_columns()
+        .make_widget();
+
+    let second_row = if is_root {
+        joint_row
+            .collapse_vertically(jointed.map_each_cloned(|j| !j))
+            .make_widget()
+    } else {
+        jointed
+            .clone()
+            .switcher(move |jointed, _| {
+                if *jointed {
+                    joint_row.clone()
+                } else {
+                    non_joint_row.clone()
+                }
+            })
+            .make_widget()
+    };
+
+    "Joint Name"
+        .align_left()
+        .and(joint_label_editor)
+        .into_rows()
+        .fit_horizontally()
+        .align_top()
+        .expand()
+        .and(
+            "Bone Name"
+                .align_left()
+                .and(label_editor)
+                .into_rows()
+                .fit_horizontally()
+                .align_top()
+                .expand(),
+        )
+        .and(
+            "Bone Length"
+                .align_left()
+                .and(length_editor)
+                .into_rows()
+                .fit_horizontally()
+                .align_top()
+                .expand(),
+        )
+        .and(jointed_editor.fit_horizontally().expand())
+        .into_columns()
+        .and(second_row)
+        .into_rows()
+}
+
\ No newline at end of file diff --git a/main/src/funnybones/animation.rs.html b/main/src/funnybones/animation.rs.html index 4ce61d1..efb3209 100644 --- a/main/src/funnybones/animation.rs.html +++ b/main/src/funnybones/animation.rs.html @@ -1,4 +1,4 @@ -animation.rs - source
1
+animation.rs - source
1
 2
 3
 4
@@ -314,6 +314,7 @@
 314
 315
 316
+317
 
#![allow(missing_docs)]
 use std::{
     borrow::Cow,
@@ -323,9 +324,10 @@
     time::Duration,
 };
 
+use cushy::animation::LinearInterpolate;
 use easing_function::{easings::StandardEasing, Easing};
 
-use crate::{BoneId, JointId, Rotation, Skeleton, Vector};
+use crate::{Angle, BoneId, Coordinate, JointId, Skeleton, Vector};
 
 #[derive(Default, Debug, PartialEq, Clone)]
 pub struct Animation(Arc<AnimationData>);
@@ -483,7 +485,7 @@
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum ChangeKind {
     Bone { bone: BoneId, position: Vector },
-    Joint { joint: JointId, rotation: Rotation },
+    Joint { joint: JointId, rotation: Angle },
 }
 
 impl ChangeKind {
@@ -494,7 +496,7 @@
 }
 
 enum OriginalProperty {
-    Rotation(Rotation),
+    Rotation(Angle),
     Vector(Vector),
 }
 
@@ -553,9 +555,9 @@
                     self.frame_props.reserve(frame.changes.len());
                     for change in &frame.changes {
                         self.frame_props.push(match change.kind {
-                            ChangeKind::Bone { bone, .. } => {
-                                OriginalProperty::Vector(skeleton[bone].end())
-                            }
+                            ChangeKind::Bone { bone, .. } => OriginalProperty::Vector(
+                                skeleton[bone].start().vector_to(skeleton[bone].end()),
+                            ),
 
                             ChangeKind::Joint { joint, .. } => {
                                 OriginalProperty::Rotation(skeleton[joint].angle())
@@ -575,7 +577,7 @@
                             },
                             OriginalProperty::Vector(original),
                         ) => {
-                            skeleton[bone].set_desired_end(Some(original.lerp(target, factor)));
+                            skeleton[bone].set_desired_end(Some(original.lerp(&target, factor)));
                         }
                         (
                             ChangeKind::Joint {
@@ -584,7 +586,7 @@
                             },
                             OriginalProperty::Rotation(original),
                         ) => {
-                            skeleton[joint].set_angle(original.lerp(target, factor));
+                            skeleton[joint].set_angle(original.lerp(&target, factor));
                         }
                         _ => unreachable!(),
                     }
@@ -606,16 +608,16 @@
     }
 }
 
-impl Lerp for Vector {
+impl Lerp for Coordinate {
     fn lerp(self, target: Self, percent: f32) -> Self {
-        Vector::new(
+        Coordinate::new(
             self.x.lerp(target.x, percent),
             self.y.lerp(target.y, percent),
         )
     }
 }
 
-impl Lerp for Rotation {
+impl Lerp for Angle {
     fn lerp(self, target: Self, percent: f32) -> Self {
         let delta_neg = self.radians - target.radians;
         let delta_pos = target.radians - self.radians;
diff --git a/main/src/funnybones/cushy.rs.html b/main/src/funnybones/cushy.rs.html
new file mode 100644
index 0000000..075b18c
--- /dev/null
+++ b/main/src/funnybones/cushy.rs.html
@@ -0,0 +1,101 @@
+cushy.rs - source
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
+
//! Widgets for editing and rendering skeletons.
+
+use cushy::{
+    animation::{LinearInterpolate, PercentBetween},
+    figures::{IntoComponents, Ranged},
+};
+
+use crate::{Angle, Coordinate, Vector};
+
+pub mod skeleton_canvas;
+
+impl PercentBetween for Angle {
+    fn percent_between(&self, min: &Self, max: &Self) -> cushy::animation::ZeroToOne {
+        self.radians.percent_between(&min.radians, &max.radians)
+    }
+}
+
+impl LinearInterpolate for Angle {
+    fn lerp(&self, target: &Self, percent: f32) -> Self {
+        Self {
+            radians: self.radians.lerp(&target.radians, percent),
+        }
+    }
+}
+
+impl LinearInterpolate for Vector {
+    fn lerp(&self, target: &Self, percent: f32) -> Self {
+        Self {
+            magnitude: self.magnitude.lerp(&target.magnitude, percent),
+            direction: self.direction.lerp(&target.direction, percent),
+        }
+    }
+}
+
+impl IntoComponents<f32> for Coordinate {
+    fn into_components(self) -> (f32, f32) {
+        (self.x, self.y)
+    }
+}
+
+impl cushy::figures::FromComponents<f32> for Coordinate {
+    fn from_components(components: (f32, f32)) -> Self {
+        Self::new(components.0, components.1)
+    }
+}
+
+impl Ranged for Angle {
+    const MIN: Self = Self::MIN;
+    const MAX: Self = Self::MAX;
+}
+
\ No newline at end of file diff --git a/main/src/funnybones/cushy/skeleton_canvas.rs.html b/main/src/funnybones/cushy/skeleton_canvas.rs.html new file mode 100644 index 0000000..73e0723 --- /dev/null +++ b/main/src/funnybones/cushy/skeleton_canvas.rs.html @@ -0,0 +1,705 @@ +skeleton_canvas.rs - source
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
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+
#![allow(missing_docs)]
+use core::f32;
+
+use crate::{Angle, BoneEnd, BoneId, Coordinate, JointId, Skeleton, Vector};
+use cushy::{
+    context::{EventContext, GraphicsContext, LayoutContext},
+    figures::{
+        units::{Px, UPx},
+        FloatConversion, IntoComponents, Point, Round, Size,
+    },
+    kludgine::{
+        app::winit::{event::MouseButton, window::CursorIcon},
+        shapes::{PathBuilder, Shape, StrokeOptions},
+        DrawableExt, Origin,
+    },
+    styles::Color,
+    value::{Dynamic, DynamicRead},
+    widget::{Callback, EventHandling, Widget, HANDLED, IGNORED},
+    window::DeviceId,
+    ConstraintLimit,
+};
+
+#[derive(Debug)]
+pub struct SkeletonCanvas {
+    skeleton: Dynamic<Skeleton>,
+    hovering: Option<Target>,
+    scale: f32,
+    maximum_scale: f32,
+    offset: Point<Px>,
+    drag: Option<DragInfo>,
+    on_mutate: Option<Callback<SkeletonMutation>>,
+}
+
+impl SkeletonCanvas {
+    #[must_use]
+    pub fn new(skeleton: Dynamic<Skeleton>) -> Self {
+        Self {
+            skeleton,
+            hovering: None,
+            scale: f32::MAX,
+            maximum_scale: 0.,
+            offset: Point::default(),
+            drag: None,
+            on_mutate: None,
+        }
+    }
+
+    #[must_use]
+    pub fn on_mutate<F>(mut self, on_mutate: F) -> Self
+    where
+        F: FnMut(SkeletonMutation) + Send + 'static,
+    {
+        self.on_mutate = Some(Callback::new(on_mutate));
+        self
+    }
+
+    fn vector_position(&self, vector: Coordinate) -> Point<Px> {
+        (vector * self.scale).to_vec::<Point<f32>>().map(Px::from) + self.offset
+    }
+
+    fn position_to_vector(&self, position: Point<Px>) -> Coordinate {
+        (position - self.offset)
+            .map(FloatConversion::into_float)
+            .to_vec::<Coordinate>()
+            / self.scale
+    }
+}
+
+impl Widget for SkeletonCanvas {
+    fn redraw(&mut self, context: &mut GraphicsContext<'_, '_, '_, '_>) {
+        context.redraw_when_changed(&self.skeleton);
+        let mut skeleton = self.skeleton.lock();
+        skeleton.prevent_notifications();
+        if skeleton.bones().is_empty() {
+            return;
+        }
+        skeleton.solve();
+        let root_start = skeleton.bones()[0].start();
+        let (min, max) = skeleton.bones().iter().fold(
+            (Coordinate::new(f32::MAX, f32::MAX), Coordinate::default()),
+            |(min, max), bone| {
+                let start = bone.start() - root_start;
+                let end = bone.end() - root_start;
+                (
+                    Coordinate::new(min.x.min(start.x).min(end.x), min.y.min(start.y).min(end.y)),
+                    Coordinate::new(max.x.max(start.x).max(end.x), max.y.max(start.y).max(end.y)),
+                )
+            },
+        );
+
+        let skeleton_extent =
+            Coordinate::new(min.x.abs().max(max.x.abs()), min.y.abs().max(max.y.abs()));
+
+        let middle = context.gfx.size().into_float().to_vec::<Coordinate>() / 2.;
+        let height_ratio = middle.y / skeleton_extent.y;
+        let width_ratio = middle.x / skeleton_extent.x;
+        let zero_width = width_ratio.is_nan();
+        let zero_height = height_ratio.is_nan();
+        if zero_height && zero_width {
+            return;
+        }
+
+        self.maximum_scale = if zero_height || width_ratio < height_ratio {
+            width_ratio
+        } else {
+            height_ratio
+        };
+        if self.scale > self.maximum_scale {
+            self.scale = self.maximum_scale;
+        }
+        let root = root_start * self.scale;
+
+        self.offset = (middle - root).to_vec::<Point<f32>>().map(Px::from).floor();
+
+        let selected = self.drag.as_ref().map_or(self.hovering, |d| Some(d.target));
+
+        for bone in skeleton.bones() {
+            let path = if let Some(joint) = bone.solved_joint() {
+                let joint = self.vector_position(joint);
+                context.gfx.draw_shape(
+                    Shape::filled_circle(Px::new(4), Color::WHITE, Origin::Center)
+                        .translate_by(joint),
+                );
+                PathBuilder::new(self.vector_position(bone.start()))
+                    .line_to(joint)
+                    .line_to(self.vector_position(bone.end()))
+                    .build()
+            } else {
+                PathBuilder::new(self.vector_position(bone.start()))
+                    .line_to(self.vector_position(bone.end()))
+                    .build()
+            };
+            let (selected, stroke) = match selected {
+                Some(Target::DesiredEnd(id)) if id == bone.id() => {
+                    (true, StrokeOptions::px_wide(2).colored(Color::RED))
+                }
+                Some(Target::Joint(joint)) if skeleton[joint].bone_b == bone.id().axis_a() => {
+                    (true, StrokeOptions::px_wide(2).colored(Color::RED))
+                }
+                Some(Target::Joint(joint)) if skeleton[joint].bone_a.bone == bone.id() => {
+                    (false, StrokeOptions::px_wide(2).colored(Color::BLUE))
+                }
+                _ => (false, StrokeOptions::px_wide(1).colored(Color::WHITE)),
+            };
+            context.gfx.draw_shape(&path.stroke(stroke));
+
+            if selected {
+                let end = if let Some(desired_end) =
+                    bone.solved_joint().and_then(|_| bone.desired_end())
+                {
+                    bone.start() + (desired_end + bone.entry_angle())
+                } else {
+                    bone.end()
+                };
+                let end = self.vector_position(end);
+
+                context.gfx.draw_shape(
+                    Shape::filled_circle(Px::new(10), stroke.color, Origin::Center)
+                        .translate_by(end),
+                );
+            }
+        }
+    }
+
+    fn layout(
+        &mut self,
+        available_space: Size<ConstraintLimit>,
+        _context: &mut LayoutContext<'_, '_, '_, '_>,
+    ) -> Size<UPx> {
+        available_space.map(ConstraintLimit::max)
+    }
+
+    fn hover(&mut self, location: Point<Px>, context: &mut EventContext<'_>) -> Option<CursorIcon> {
+        let location = self.position_to_vector(location);
+        let skeleton = self.skeleton.read();
+        let mut closest_match = 0.1;
+        let current_hover = self.hovering.take();
+        for bone in skeleton.bones() {
+            let mut distance = (location - bone.end()).magnitude() / 10.;
+            if let Some(mid) = bone.solved_joint() {
+                // This can have its desired_end set
+                distance = distance.min(
+                    distance_to_line(location, bone.start(), mid).min(distance_to_line(
+                        location,
+                        mid,
+                        bone.end(),
+                    )),
+                );
+                if let Some(desired_end) = bone.desired_end() {
+                    distance = distance.min((location - desired_end).magnitude());
+                }
+
+                if distance < closest_match {
+                    closest_match = distance;
+                    self.hovering = Some(Target::DesiredEnd(bone.id()));
+                }
+            } else if !bone.is_root() {
+                // Single line segment
+                let distance = distance_to_line(location, bone.start(), bone.end());
+                if distance < closest_match {
+                    closest_match = distance;
+                    // For a non-jointed bone, interacting with it adjusts the
+                    // joint angle.
+                    if let Some(joint) = skeleton
+                        .connections_to(bone.id().axis_a())
+                        .and_then(|joints| joints.first())
+                    {
+                        self.hovering = Some(Target::Joint(*joint));
+                    }
+                }
+            }
+        }
+
+        if self.hovering != current_hover {
+            context.set_needs_redraw();
+        }
+
+        None
+    }
+
+    fn unhover(&mut self, context: &mut EventContext<'_>) {
+        if self.hovering.take().is_some() {
+            context.set_needs_redraw();
+        }
+    }
+
+    fn mouse_down(
+        &mut self,
+        location: Point<Px>,
+        _device_id: DeviceId,
+        _button: MouseButton,
+        _context: &mut EventContext<'_>,
+    ) -> EventHandling {
+        if let Some(target) = self.hovering {
+            self.drag = Some(DragInfo {
+                target,
+                last: self.position_to_vector(location),
+            });
+            HANDLED
+        } else {
+            IGNORED
+        }
+    }
+
+    fn mouse_drag(
+        &mut self,
+        location: Point<Px>,
+        _device_id: DeviceId,
+        _button: MouseButton,
+        _context: &mut EventContext<'_>,
+    ) {
+        let location = self.position_to_vector(location);
+        if let Some(drag) = &mut self.drag {
+            let delta = location - drag.last;
+            if delta.magnitude() > f32::EPSILON {
+                drag.last = location;
+                match drag.target {
+                    Target::Joint(joint_id) => {
+                        // Calculate the angle needed to make the second bone's
+                        // line pass through location.
+                        let mut skeleton = self.skeleton.lock();
+                        if skeleton.generation == 0 {
+                            skeleton.solve();
+                        }
+                        let joint = &skeleton[joint_id];
+                        let bone_a = &skeleton[joint.bone_a.bone];
+                        let bone_b = &skeleton[joint.bone_b.bone];
+                        let bone_a_rotation = bone_b.entry_angle();
+                        let start = bone_a.solved_joint().unwrap_or_else(|| bone_a.start());
+                        let end = match joint.bone_a.end {
+                            BoneEnd::A => start,
+                            BoneEnd::B => bone_a.end(),
+                        };
+                        let new_bone_rotation = (location - end).as_rotation();
+                        let rotation = new_bone_rotation - bone_a_rotation;
+                        drop(skeleton);
+
+                        if let Some(on_mutate) = &mut self.on_mutate {
+                            on_mutate.invoke(SkeletonMutation::SetJointRotation {
+                                joint: joint_id,
+                                rotation,
+                            });
+                        }
+                    }
+                    Target::DesiredEnd(bone) => {
+                        if let Some(on_mutate) = &mut self.on_mutate {
+                            let mut skeleton = self.skeleton.lock();
+                            if skeleton.generation == 0 {
+                                skeleton.solve();
+                            }
+                            let end = Vector::from(location - skeleton[bone].start())
+                                - skeleton[bone].entry_angle();
+                            drop(skeleton);
+                            on_mutate.invoke(SkeletonMutation::SetDesiredEnd { bone, end });
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    fn mouse_up(
+        &mut self,
+        _location: Option<Point<Px>>,
+        _device_id: DeviceId,
+        _button: MouseButton,
+        _context: &mut EventContext<'_>,
+    ) {
+        self.drag = None;
+    }
+
+    fn hit_test(&mut self, _location: Point<Px>, _context: &mut EventContext<'_>) -> bool {
+        true
+    }
+}
+
+fn distance_to_line(test: Coordinate, p1: Coordinate, p2: Coordinate) -> f32 {
+    let delta = p2 - p1;
+    let segment_length = delta.magnitude();
+
+    let p1_distance = (test - p1).magnitude();
+    let p2_distance = (test - p2).magnitude();
+
+    match (p1_distance >= segment_length, p2_distance >= segment_length) {
+        (true, true) => p1_distance.min(p2_distance),
+        (true, false) => p2_distance,
+        (false, true) => p1_distance,
+        _ => {
+            let numerator = delta.y * test.x - delta.x * test.y + p2.x * p1.y - p2.y * p1.x;
+
+            numerator.abs() / segment_length
+        }
+    }
+}
+
+#[derive(Debug, Clone, Copy, Eq, PartialEq)]
+pub enum Target {
+    Joint(JointId),
+    DesiredEnd(BoneId),
+}
+
+#[derive(Debug)]
+struct DragInfo {
+    target: Target,
+    last: Coordinate,
+}
+
+#[derive(Clone, Copy, Debug, PartialEq)]
+pub enum SkeletonMutation {
+    SetDesiredEnd { bone: BoneId, end: Vector },
+    SetJointRotation { joint: JointId, rotation: Angle },
+}
+
\ No newline at end of file diff --git a/main/src/funnybones/lib.rs.html b/main/src/funnybones/lib.rs.html index 4d01654..d0a6962 100644 --- a/main/src/funnybones/lib.rs.html +++ b/main/src/funnybones/lib.rs.html @@ -1,4 +1,4 @@ -lib.rs - source
1
+lib.rs - source
1
 2
 3
 4
@@ -773,6 +773,193 @@
 773
 774
 775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
 
#![doc = include_str!(".crate-docs.md")]
 
 use std::{
@@ -780,25 +967,28 @@
     collections::{HashMap, HashSet},
     f32::consts::PI,
     fmt::{Debug, Display},
-    ops::{Add, Deref, Index, IndexMut, Neg, Sub},
+    ops::{Add, AddAssign, Deref, Div, Index, IndexMut, Mul, Neg, Sub, SubAssign},
     sync::Arc,
+    vec::Vec,
 };
 
 pub mod animation;
+#[cfg(feature = "cushy")]
+pub mod cushy;
 #[cfg(feature = "serde")]
 mod serde;
 
 /// A two dimensionsional offset/measurement.
 #[derive(Default, Clone, Copy, PartialEq, Debug)]
 #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
-pub struct Vector {
+pub struct Coordinate {
     /// The x-axis component of this vector.
     pub x: f32,
     /// The y-axis component of this vector.
     pub y: f32,
 }
 
-impl Vector {
+impl Coordinate {
     /// Returns a new vector from the x and y values.
     #[must_use]
     pub const fn new(x: f32, y: f32) -> Self {
@@ -819,9 +1009,32 @@
             y: f(self.y),
         }
     }
+
+    /// Returns the angle formed a line passing through 0,0 towards this vector.
+    #[must_use]
+    pub fn as_rotation(self) -> Angle {
+        Angle::radians(self.y.atan2(self.x))
+    }
+
+    /// Returns a vector pointing from `self` to `other`.
+    #[must_use]
+    pub fn vector_to(self, other: Coordinate) -> Vector {
+        Vector::from(other - self)
+    }
+}
+
+impl Add for Coordinate {
+    type Output = Self;
+
+    fn add(self, rhs: Self) -> Self::Output {
+        Self {
+            x: self.x + rhs.x,
+            y: self.y + rhs.y,
+        }
+    }
 }
 
-impl Sub for Vector {
+impl Sub for Coordinate {
     type Output = Self;
 
     fn sub(self, rhs: Self) -> Self::Output {
@@ -832,28 +1045,43 @@
     }
 }
 
-#[cfg(feature = "cushy")]
-impl cushy::figures::IntoComponents<f32> for Vector {
-    fn into_components(self) -> (f32, f32) {
-        (self.x, self.y)
+impl Mul<f32> for Coordinate {
+    type Output = Self;
+
+    fn mul(self, rhs: f32) -> Self::Output {
+        Self {
+            x: self.x * rhs,
+            y: self.y * rhs,
+        }
     }
 }
 
-#[cfg(feature = "cushy")]
-impl cushy::figures::FromComponents<f32> for Vector {
-    fn from_components(components: (f32, f32)) -> Self {
-        Self::new(components.0, components.1)
+impl Div<f32> for Coordinate {
+    type Output = Self;
+
+    fn div(self, rhs: f32) -> Self::Output {
+        Self {
+            x: self.x / rhs,
+            y: self.y / rhs,
+        }
     }
 }
 
-/// A value representing a rotation between no rotation and a full rotation.
+/// A value representing a direction.
 #[derive(Clone, Copy, PartialEq, PartialOrd)]
 #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
-pub struct Rotation {
+pub struct Angle {
     radians: f32,
 }
 
-impl Rotation {
+impl Angle {
+    /// The minimum rotation represented by this type.
+    pub const MIN: Self = Self { radians: 0. };
+    /// The maximum rotation represented by this type.
+    pub const MAX: Self = Self {
+        radians: PI * 2. - f32::EPSILON,
+    };
+
     /// Returns a rotation representing the given radians.
     #[must_use]
     pub fn radians(radians: f32) -> Self {
@@ -894,43 +1122,39 @@
         }
         self
     }
-}
 
-#[cfg(feature = "cushy")]
-impl cushy::animation::PercentBetween for Rotation {
-    fn percent_between(&self, min: &Self, max: &Self) -> cushy::animation::ZeroToOne {
-        self.radians.percent_between(&min.radians, &max.radians)
+    /// Returns the cosine of this angle.
+    #[must_use]
+    pub fn cos(self) -> f32 {
+        self.radians.cos()
     }
-}
 
-#[cfg(feature = "cushy")]
-impl cushy::animation::LinearInterpolate for Rotation {
-    fn lerp(&self, target: &Self, percent: f32) -> Self {
-        Self {
-            radians: self.radians.lerp(&target.radians, percent),
-        }
+    /// Returns the sine of this angle.
+    #[must_use]
+    pub fn sin(self) -> f32 {
+        self.radians.sin()
     }
 }
 
-impl Debug for Rotation {
+impl Debug for Angle {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
         Display::fmt(self, f)
     }
 }
 
-impl Display for Rotation {
+impl Display for Angle {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
         write!(f, "{}°", self.to_degrees())
     }
 }
 
-impl Default for Rotation {
+impl Default for Angle {
     fn default() -> Self {
         Self { radians: 0. }
     }
 }
 
-impl Add for Rotation {
+impl Add for Angle {
     type Output = Self;
 
     fn add(self, rhs: Self) -> Self::Output {
@@ -938,7 +1162,13 @@
     }
 }
 
-impl Sub for Rotation {
+impl AddAssign for Angle {
+    fn add_assign(&mut self, rhs: Self) {
+        self.radians = (*self + rhs).radians;
+    }
+}
+
+impl Sub for Angle {
     type Output = Self;
 
     fn sub(self, rhs: Self) -> Self::Output {
@@ -946,7 +1176,13 @@
     }
 }
 
-impl Neg for Rotation {
+impl SubAssign for Angle {
+    fn sub_assign(&mut self, rhs: Self) {
+        self.radians = (*self - rhs).radians;
+    }
+}
+
+impl Neg for Angle {
     type Output = Self;
 
     fn neg(self) -> Self::Output {
@@ -954,6 +1190,79 @@
     }
 }
 
+/// A 2D Euclidean vector.
+#[derive(Clone, Copy, PartialEq, Debug, Default)]
+#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
+pub struct Vector {
+    /// The length of the vector.
+    pub magnitude: f32,
+    /// The direction the vector is heading.
+    pub direction: Angle,
+}
+
+impl Vector {
+    /// Returns a new vector for the given magnitude and direction.
+    #[must_use]
+    pub const fn new(magnitude: f32, direction: Angle) -> Self {
+        Self {
+            magnitude,
+            direction,
+        }
+    }
+}
+
+impl From<Vector> for Coordinate {
+    fn from(vec: Vector) -> Self {
+        Self {
+            x: vec.magnitude * vec.direction.cos(),
+            y: vec.magnitude * vec.direction.sin(),
+        }
+    }
+}
+
+impl From<Coordinate> for Vector {
+    fn from(pt: Coordinate) -> Self {
+        Self {
+            direction: pt.as_rotation(),
+            magnitude: pt.magnitude(),
+        }
+    }
+}
+
+impl Add<Vector> for Coordinate {
+    type Output = Self;
+
+    fn add(self, rhs: Vector) -> Self::Output {
+        self + Coordinate::from(rhs)
+    }
+}
+
+impl Sub<Vector> for Coordinate {
+    type Output = Self;
+
+    fn sub(self, rhs: Vector) -> Self::Output {
+        self - Coordinate::from(rhs)
+    }
+}
+
+impl Add<Angle> for Vector {
+    type Output = Self;
+
+    fn add(mut self, rhs: Angle) -> Self::Output {
+        self.direction += rhs;
+        self
+    }
+}
+
+impl Sub<Angle> for Vector {
+    type Output = Self;
+
+    fn sub(mut self, rhs: Angle) -> Self::Output {
+        self.direction -= rhs;
+        self
+    }
+}
+
 /// A representation of a bone structure inside of a [`Skeleton`].
 #[derive(Debug, Clone, Copy, PartialEq)]
 #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
@@ -987,6 +1296,19 @@
             label: label.into(),
         }
     }
+
+    /// Returns the full length of this bone.
+    #[must_use]
+    pub fn full_length(&self) -> f32 {
+        match self {
+            BoneKind::Rigid { length } => *length,
+            BoneKind::Jointed {
+                start_length,
+                end_length,
+                ..
+            } => *start_length + *end_length,
+        }
+    }
 }
 
 /// A [`BoneKind`] with an associated label.
@@ -1027,10 +1349,10 @@
 }
 
 /// A collection of [`Bone`]s. connected by [`Joint`]s.
-#[derive(Default, Debug)]
+#[derive(Default, Debug, PartialEq)]
 pub struct Skeleton {
-    initial_joint: Option<JointId>,
     bones: Vec<Bone>,
+    rotation: Angle,
     joints: Vec<Joint>,
     connections: HashMap<BoneAxis, Vec<JointId>>,
     generation: usize,
@@ -1047,12 +1369,8 @@
     /// [`Joint`]s.
     pub fn push_bone(&mut self, bone: impl Into<LabeledBoneKind>) -> BoneId {
         let bone = bone.into();
-        let id = BoneId(u8::try_from(self.bones.len()).expect("too many bones"));
-        if id == BoneId(0) {
-            let joint = self.push_joint(Joint::new(Rotation::default(), id.axis_a(), id.axis_a()));
-            self.initial_joint = Some(joint);
-            self.connections.insert(id.axis_a(), vec![joint]);
-        }
+        let id = BoneId(u16::try_from(self.bones.len()).expect("too many bones"));
+
         let label = if bone.label.is_empty() {
             None
         } else {
@@ -1061,21 +1379,42 @@
             Some(label)
         };
         self.bones.push(Bone {
+            id,
             generation: self.generation,
             label,
             kind: bone.kind,
-            start: Vector::default(),
+            start: Coordinate::default(),
             joint_pos: None,
-            end: Vector::default(),
+            end: Coordinate::default(),
             desired_end: None,
+            entry_angle: Angle::default(),
         });
         id
     }
 
+    /// Returns the list of bones in this skeleton.
+    #[must_use]
+    pub fn bones(&self) -> &[Bone] {
+        &self.bones
+    }
+
+    /// Returns the list of joints in this skeleton.
+    #[must_use]
+    pub fn joints(&self) -> &[Joint] {
+        &self.joints
+    }
+
+    /// Returns a list of joints connected to a specific bone axis.
+    #[must_use]
+    pub fn connections_to(&self, axis: BoneAxis) -> Option<&[JointId]> {
+        self.connections.get(&axis).map(Vec::as_slice)
+    }
+
     /// Creates a new [`Joint`] in the skeleton, connecting two bones together
     /// by their [axis](BoneAxis). Returns the unique id of the created joint.
-    pub fn push_joint(&mut self, joint: Joint) -> JointId {
-        let id = JointId(u8::try_from(self.joints.len()).expect("too many joints"));
+    pub fn push_joint(&mut self, mut joint: Joint) -> JointId {
+        let id = JointId(u16::try_from(self.joints.len()).expect("too many joints"));
+        joint.id = id;
         let bone_a = joint.bone_a;
         let bone_b = joint.bone_b;
         if let Some(label) = joint.label.clone() {
@@ -1102,29 +1441,26 @@
     }
 
     /// Sets a translation to be applied to the entire skeleton.
-    pub fn set_translation(&mut self, translation: Vector) {
+    pub fn set_translation(&mut self, translation: Coordinate) {
         let bone = self.bones.first_mut().expect("root bone must be defined");
         bone.start = translation;
     }
 
     /// Returns the translation applied to the entire skeleton.
     #[must_use]
-    pub fn translation(&self) -> Vector {
+    pub fn translation(&self) -> Coordinate {
         self.bones.first().expect("root bone must be defined").start
     }
 
     /// Sets a base rotation to apply to the entire skeleton.
-    pub fn set_rotation(&mut self, rotation: Rotation) {
-        let joint = self.initial_joint.expect("root bone must be defined");
-        let joint = &mut self[joint];
-        joint.angle = rotation;
+    pub fn set_rotation(&mut self, rotation: Angle) {
+        self.rotation = rotation;
     }
 
     /// Returns the base rotation being applied to the entire skeleton.
     #[must_use]
-    pub fn rotation(&self) -> Rotation {
-        let joint = self.initial_joint.expect("root bone must be defined");
-        self[joint].angle
+    pub const fn rotation(&self) -> Angle {
+        self.rotation
     }
 
     /// Updates the solved positions of all bones in this skeleton that are
@@ -1132,14 +1468,34 @@
     pub fn solve(&mut self) {
         if !self.bones.is_empty() {
             self.generation = self.generation.wrapping_add(1);
-            self.solve_axis(BoneId(0).axis_a());
+            self.solve_axis();
         }
     }
 
-    fn solve_axis(&mut self, axis: BoneAxis) {
+    fn solve_axis(&mut self) {
         let mut axis_solved = HashSet::new();
-        let mut to_solve = vec![(axis, None, Rotation::default(), false)];
-        while let Some((axis, current_position, current_rotation, inverse_root)) = to_solve.pop() {
+        let root_bone = &mut self.bones[0];
+        let (end, mid) = determine_end_position(
+            root_bone.start,
+            root_bone.desired_end,
+            self.rotation,
+            Angle::radians(0.),
+            &root_bone.kind,
+        );
+        root_bone.entry_angle = self.rotation;
+        root_bone.end = end;
+        root_bone.joint_pos = mid;
+        let angle = root_bone.final_vector().direction;
+
+        let mut to_solve = vec![
+            (
+                root_bone.id.axis_a(),
+                root_bone.start,
+                angle + Angle::radians(PI),
+            ),
+            (root_bone.id.axis_b(), root_bone.end, angle),
+        ];
+        while let Some((axis, current_position, current_rotation)) = to_solve.pop() {
             if !axis_solved.insert(axis) {
                 continue;
             }
@@ -1149,120 +1505,83 @@
             };
 
             println!(
-                "Solving {}:{:?} at {current_position:?} - {current_rotation} - {inverse_root}",
-                self.bones[usize::from(axis.bone.0)].label(),
-                axis.end
+                "Solving {axis:?} - {}",
+                self.bones[axis.bone.index()]
+                    .label
+                    .as_ref()
+                    .map_or("", |s| s)
             );
-
             for joint_id in connections {
-                let joint = &mut self.joints[usize::from(joint_id.0)];
+                let joint = &mut self.joints[joint_id.index()];
                 let other_axis = joint.other_axis(axis);
-                let bone = &mut self.bones[usize::from(other_axis.bone.0)];
+                let bone = &mut self.bones[other_axis.bone.index()];
                 if bone.generation == self.generation {
                     // We store connections in both directions, which means we
                     // can visit bones twice. We want to ensure we only follow
                     // each bone a single time.
                     continue;
                 }
-                bone.generation = self.generation;
                 println!(
-                    "  -> {joint_id:?} -> {}:{:?} ({})",
-                    bone.label(),
-                    other_axis.end,
-                    joint.angle
+                    "{joint_id:?}{} -> {other_axis:?}{} at {current_rotation}",
+                    joint.label.as_ref().map_or("", |s| s),
+                    bone.label.as_ref().map_or("", |s| s)
                 );
-                joint.calculated_position = if let Some(current_position) = current_position {
-                    bone.start = current_position;
-                    current_position
-                } else {
-                    debug_assert_eq!(axis.bone.0, 0);
-                    bone.start
-                };
-
-                let angle = if inverse_root {
-                    Rotation::radians(PI) - joint.angle
-                } else {
-                    joint.angle
-                };
+                bone.generation = self.generation;
+                bone.entry_angle = current_rotation;
+                bone.start = current_position;
+                joint.calculated_position = current_position;
 
-                let mut next_rotation = current_rotation + angle;
                 let (end, mid) = determine_end_position(
-                    joint.calculated_position,
+                    current_position,
                     bone.desired_end,
-                    next_rotation,
+                    current_rotation,
+                    joint.angle,
                     &bone.kind,
                 );
                 bone.end = end;
                 bone.joint_pos = mid;
-                if let Some(mid) = mid {
-                    let final_delta = end - mid;
-                    let rotation = Rotation::radians(final_delta.y.atan2(final_delta.x));
-                    // TODO I don't know why rotating by 90 degrees fixes
-                    // everything here. It feels like atan2 should be giving us
-                    // the correct rotation, or the correction amount should be
-                    // driven by an input angle, but a fixed correction amount
-                    // seems to be the correct answer. Without this, a joint
-                    // angle of 0 sticks out at a perpendicular angle.
-                    next_rotation = rotation + Rotation::radians(PI / 2.);
-                }
 
-                if axis == BoneId(0).axis_a() && other_axis == axis {
-                    // The first joint doesn't have any real connection, so we
-                    // must manually traverse the other side of the root bone.
-                    to_solve.push((
-                        axis.bone.axis_b(),
-                        Some(self.bones[0].end),
-                        current_rotation,
-                        true,
-                    ));
-                } else {
-                    to_solve.push((other_axis.inverse(), Some(bone.end), next_rotation, true));
-                }
+                to_solve.push((
+                    other_axis.inverse(),
+                    bone.end,
+                    bone.final_vector().direction,
+                ));
             }
         }
     }
 }
 
-fn next_point(mut point: Vector, angle: Rotation, length: f32) -> Vector {
-    point.x += length * angle.radians.sin();
-    point.y -= length * angle.radians.cos();
-    point
-}
-
 fn determine_end_position(
-    start: Vector,
+    start: Coordinate,
     desired_end: Option<Vector>,
-    angle: Rotation,
+    current_rotation: Angle,
+    joint_angle: Angle,
     bone: &BoneKind,
-) -> (Vector, Option<Vector>) {
+) -> (Coordinate, Option<Coordinate>) {
     match bone {
-        BoneKind::Rigid { length } => (next_point(start, angle, *length), None),
+        BoneKind::Rigid { length } => (
+            start + Vector::new(*length, current_rotation + joint_angle),
+            None,
+        ),
         BoneKind::Jointed {
             start_length,
             end_length,
             inverse,
         } => {
             if let Some(desired_end) = desired_end {
-                let delta = desired_end - start;
-                let desired_angle = Rotation::radians(delta.y.atan2(delta.x) + PI / 2.);
-                let distance = delta.magnitude();
+                let desired_angle = desired_end.direction + current_rotation;
+                let distance = desired_end.magnitude;
                 let full_length = start_length + end_length;
                 let minimum_size = (start_length - end_length).abs();
-                let (capped, desired_length) = if distance < minimum_size {
-                    (true, minimum_size)
+                let desired_length = if distance < minimum_size {
+                    minimum_size
                 } else if distance > full_length {
-                    (true, full_length)
+                    full_length
                 } else {
-                    (false, distance)
+                    distance
                 };
 
-                let end = if capped {
-                    // We need to cap the end point along this sloped line
-                    next_point(start, desired_angle, desired_length)
-                } else {
-                    // The end position is valid
-                    desired_end
-                };
+                let end = start + Vector::new(desired_length, desired_angle);
 
                 let joint = get_third_point(
                     *inverse,
@@ -1275,8 +1594,8 @@
 
                 (end, Some(joint))
             } else {
-                let joint = next_point(start, angle, *start_length);
-                let end = next_point(joint, angle, *end_length);
+                let joint = start + Vector::new(*start_length, current_rotation);
+                let end = joint + Vector::new(*end_length, current_rotation);
                 (end, Some(joint))
             }
         }
@@ -1285,22 +1604,22 @@
 
 fn get_third_point(
     inverse: bool,
-    start: Vector,
+    start: Coordinate,
     distance: f32,
-    hyp_angle: Rotation,
+    hyp_angle: Angle,
     first: f32,
     second: f32,
-) -> Vector {
+) -> Coordinate {
     let hyp = distance;
     let first_angle = ((first * first + hyp * hyp - second * second) / (2. * first * hyp)).acos();
     if first_angle.is_nan() {
-        next_point(start, hyp_angle, first)
+        start + Vector::new(first, hyp_angle)
     } else {
         let first_angle = hyp_angle
-            - Rotation {
+            - Angle {
                 radians: if inverse { -first_angle } else { first_angle },
             };
-        next_point(start, first_angle, first)
+        start + Vector::new(first, first_angle)
     }
 }
 
@@ -1308,13 +1627,13 @@
     type Output = Bone;
 
     fn index(&self, index: BoneId) -> &Self::Output {
-        &self.bones[usize::from(index.0)]
+        &self.bones[index.index()]
     }
 }
 
 impl IndexMut<BoneId> for Skeleton {
     fn index_mut(&mut self, index: BoneId) -> &mut Self::Output {
-        &mut self.bones[usize::from(index.0)]
+        &mut self.bones[index.index()]
     }
 }
 
@@ -1322,13 +1641,13 @@
     type Output = Joint;
 
     fn index(&self, index: JointId) -> &Self::Output {
-        &self.joints[usize::from(index.0)]
+        &self.joints[index.index()]
     }
 }
 
 impl IndexMut<JointId> for Skeleton {
     fn index_mut(&mut self, index: JointId) -> &mut Self::Output {
-        &mut self.joints[usize::from(index.0)]
+        &mut self.joints[index.index()]
     }
 }
 
@@ -1354,19 +1673,39 @@
 }
 
 /// A bone in a [`Skeleton`].
-#[derive(Debug)]
+#[derive(Debug, PartialEq)]
 pub struct Bone {
+    id: BoneId,
     generation: usize,
     label: Option<ArcString>,
     kind: BoneKind,
-    start: Vector,
-    joint_pos: Option<Vector>,
-    end: Vector,
+    start: Coordinate,
+    joint_pos: Option<Coordinate>,
+    end: Coordinate,
     desired_end: Option<Vector>,
+    entry_angle: Angle,
 }
 
 impl Bone {
-    /// Sets the location to aim the end of this bone towards.
+    /// Returns the unique id of this bone.
+    #[must_use]
+    pub const fn id(&self) -> BoneId {
+        self.id
+    }
+
+    /// Returns true if this bone is the root of the skeleton.
+    #[must_use]
+    pub const fn is_root(&self) -> bool {
+        self.id.0 == 0
+    }
+
+    /// Returns the kind of this bone.
+    #[must_use]
+    pub const fn kind(&self) -> &BoneKind {
+        &self.kind
+    }
+
+    /// Sets a relative position to aim the end of this bone towards.
     ///
     /// The end of the bone that is aimed is the end that is furthest from the
     /// root of the skeleton.
@@ -1382,22 +1721,35 @@
         self.desired_end
     }
 
+    /// Returns the angle of the previous bone segment connecting to this bone.
+    #[must_use]
+    pub const fn entry_angle(&self) -> Angle {
+        self.entry_angle
+    }
+
     /// Returns the solved start position of this bone.
     #[must_use]
-    pub const fn start(&self) -> Vector {
+    pub const fn start(&self) -> Coordinate {
         self.start
     }
 
     /// Returns the solved end position of this bone.
     #[must_use]
-    pub const fn end(&self) -> Vector {
+    pub const fn end(&self) -> Coordinate {
         self.end
     }
 
+    /// Returns a vector representing the final segment in this bone.
+    #[must_use]
+    pub fn final_vector(&self) -> Vector {
+        let start = self.joint_pos.unwrap_or(self.start);
+        start.vector_to(self.end)
+    }
+
     /// If this is a [`BoneKind::Jointed`] bone, returns the solved position of
     /// the joint.
     #[must_use]
-    pub const fn solved_joint(&self) -> Option<Vector> {
+    pub const fn solved_joint(&self) -> Option<Coordinate> {
         self.joint_pos
     }
 
@@ -1409,24 +1761,32 @@
 }
 
 /// A connection between two bones.
-#[derive(Debug)]
+#[derive(Debug, PartialEq)]
 pub struct Joint {
+    id: JointId,
     label: Option<ArcString>,
     bone_a: BoneAxis,
     bone_b: BoneAxis,
-    calculated_position: Vector,
-    angle: Rotation,
+    calculated_position: Coordinate,
+    angle: Angle,
 }
 
 impl Joint {
+    /// Returns the unique id of this joint.
+    #[must_use]
+    pub const fn id(&self) -> JointId {
+        self.id
+    }
+
     /// Returns a new joint formed by joining `bone_a` and `bone_b` at `angle`.
     #[must_use]
-    pub const fn new(angle: Rotation, bone_a: BoneAxis, bone_b: BoneAxis) -> Self {
+    pub const fn new(angle: Angle, bone_a: BoneAxis, bone_b: BoneAxis) -> Self {
         Self {
+            id: JointId(0),
             label: None,
             bone_a,
             bone_b,
-            calculated_position: Vector::new(0., 0.),
+            calculated_position: Coordinate::new(0., 0.),
             angle,
         }
     }
@@ -1468,13 +1828,13 @@
     ///
     /// This setting is ignored if the bone furthest from the root of the joint
     /// is a [`BoneKind::Jointed`] bone.
-    pub fn set_angle(&mut self, angle: Rotation) {
+    pub fn set_angle(&mut self, angle: Angle) {
         self.angle = angle;
     }
 
     /// Returns the rotation of this joint.
     #[must_use]
-    pub const fn angle(&self) -> Rotation {
+    pub const fn angle(&self) -> Angle {
         self.angle
     }
 }
@@ -1482,7 +1842,7 @@
 /// The unique ID of a [`Bone`] in a [`Skeleton`].
 #[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash)]
 #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
-pub struct BoneId(u8);
+pub struct BoneId(u16);
 
 impl BoneId {
     /// Returns the first axis of this bone.
@@ -1502,12 +1862,26 @@
             end: BoneEnd::B,
         }
     }
+
+    /// Returns the index of this bone within the skeleton.
+    #[must_use]
+    pub fn index(self) -> usize {
+        usize::from(self.0)
+    }
 }
 
 /// The unique ID of a [`Joint`] in a [`Skeleton`].
 #[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash)]
 #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
-pub struct JointId(u8);
+pub struct JointId(u16);
+
+impl JointId {
+    /// Returns the index of this joint within the skeleton.
+    #[must_use]
+    pub fn index(self) -> usize {
+        usize::from(self.0)
+    }
+}
 
 /// A specific end of a [`Bone`].
 #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
@@ -1534,14 +1908,14 @@
 #[allow(clippy::cast_possible_truncation)]
 fn rotation() {
     assert_eq!(
-        (Rotation::degrees(90.) + Rotation::degrees(180.))
+        (Angle::degrees(90.) + Angle::degrees(180.))
             .normalized()
             .to_degrees()
             .round() as i32,
         270,
     );
     assert_eq!(
-        (Rotation::degrees(90.) + Rotation::degrees(-180.))
+        (Angle::degrees(90.) + Angle::degrees(-180.))
             .normalized()
             .to_degrees()
             .round() as i32,
diff --git a/main/src/funnybones/serde.rs.html b/main/src/funnybones/serde.rs.html
index af4e5cf..1e5b274 100644
--- a/main/src/funnybones/serde.rs.html
+++ b/main/src/funnybones/serde.rs.html
@@ -1,4 +1,4 @@
-serde.rs - source
1
+serde.rs - source
1
 2
 3
 4
@@ -163,7 +163,7 @@
     Deserialize, Serialize,
 };
 
-use crate::{Bone, BoneAxis, BoneKind, Joint, Rotation, Skeleton, Vector};
+use crate::{Angle, Bone, BoneAxis, BoneKind, Joint, Skeleton, Vector};
 
 impl Serialize for Skeleton {
     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
@@ -287,7 +287,7 @@
 struct DeserializedJoint {
     from: BoneAxis,
     to: BoneAxis,
-    angle: Rotation,
+    angle: Angle,
     #[serde(default)]
     label: String,
 }
@@ -302,7 +302,7 @@
         inverse: true,
     });
     let joint = s.push_joint(Joint::new(
-        Rotation::radians(0.),
+        Angle::radians(0.),
         spine.axis_a(),
         other.axis_b(),
     ));
@@ -310,6 +310,6 @@
     let deserialized: Skeleton = dbg!(pot::from_slice(&serialized).unwrap());
     assert_eq!(deserialized[spine].label(), "spine");
     assert_eq!(deserialized[other].label(), "");
-    assert_eq!(deserialized[joint].angle(), Rotation::radians(0.));
+    assert_eq!(deserialized[joint].angle(), Angle::radians(0.));
 }
 
\ No newline at end of file diff --git a/main/static.files/rustdoc-b25d77b18a16a9a4.css b/main/static.files/rustdoc-492a78a4a87dcc01.css similarity index 93% rename from main/static.files/rustdoc-b25d77b18a16a9a4.css rename to main/static.files/rustdoc-492a78a4a87dcc01.css index 5670bee..e9199f9 100644 --- a/main/static.files/rustdoc-b25d77b18a16a9a4.css +++ b/main/static.files/rustdoc-492a78a4a87dcc01.css @@ -14,7 +14,7 @@ xmlns="http://www.w3.org/2000/svg" fill="black" height="18px">\ ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:2;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;flex:3;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.popover{position:absolute;top:100%;right:0;z-index:calc(var(--desktop-sidebar-z-index) + 1);margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ \ ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#help.popover{max-width:600px;--popover-arrow-offset:48px;}#help dt{float:left;clear:left;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side>div{width:50%;float:left;padding:0 20px 20px 17px;}.item-info .stab{display:block;padding:3px;margin-bottom:5px;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;vertical-align:baseline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji,.item-info .stab::before{font-size:1.25rem;}.stab .emoji{margin-right:0.3rem;}.item-info .stab::before{content:"\0";width:0;display:inline-block;color:transparent;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}.top-doc>.docblock>.warning:first-child::before{top:20px;}.example-wrap>a.test-arrow,.example-wrap .button-holder{visibility:hidden;position:absolute;top:4px;right:4px;z-index:1;}a.test-arrow{height:var(--copy-path-height);padding:6px 4px 0 11px;}a.test-arrow::before{content:url('data:image/svg+xml,');}.example-wrap .button-holder{display:flex;}@media not (pointer:coarse){.example-wrap:hover>a.test-arrow,.example-wrap:hover>.button-holder{visibility:visible;}}.example-wrap .button-holder.keep-visible{visibility:visible;}.example-wrap .button-holder .copy-button,.example-wrap .test-arrow{background:var(--main-background-color);cursor:pointer;border-radius:var(--button-border-radius);height:var(--copy-path-height);width:var(--copy-path-width);}.example-wrap .button-holder .copy-button{margin-left:var(--button-left-margin);padding:2px 0 0 4px;border:0;}.example-wrap .button-holder .copy-button::before,.example-wrap .test-arrow::before{filter:var(--copy-path-img-filter);}.example-wrap .button-holder .copy-button::before{content:var(--clipboard-image);}.example-wrap .button-holder .copy-button:hover::before,.example-wrap .test-arrow:hover::before{filter:var(--copy-path-img-hover-filter);}.example-wrap .button-holder .copy-button.clicked::before{content:var(--checkmark-image);padding-right:5px;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}.src-sidebar-title{position:sticky;top:0;display:flex;padding:8px 8px 0 48px;margin-bottom:7px;background:var(--sidebar-background-color);border-bottom:1px solid var(--border-color);}#settings-menu,#help-button{margin-left:var(--button-left-margin);display:flex;}#sidebar-button{display:none;line-height:0;}.hide-sidebar #sidebar-button,.src #sidebar-button{display:flex;margin-right:4px;position:fixed;left:6px;height:34px;width:34px;background-color:var(--main-background-color);z-index:1;}.src #sidebar-button{left:8px;z-index:calc(var(--desktop-sidebar-z-index) + 1);}.hide-sidebar .src #sidebar-button{position:static;}#settings-menu>a,#help-button>a,#sidebar-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:var(--button-border-radius);color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus,#sidebar-button>a:hover,#sidebar-button>a:focus{border-color:var(--settings-button-border-focus);}#settings-menu>a{line-height:0;font-size:0;}#settings-menu>a:before{content:url('data:image/svg+xml,');}.example-wrap .button-holder{display:flex;}@media not (pointer:coarse){.example-wrap:hover>a.test-arrow,.example-wrap:hover>.button-holder{visibility:visible;}}.example-wrap .button-holder.keep-visible{visibility:visible;}.example-wrap .button-holder .copy-button,.example-wrap .test-arrow{background:var(--main-background-color);cursor:pointer;border-radius:var(--button-border-radius);height:var(--copy-path-height);width:var(--copy-path-width);}.example-wrap .button-holder .copy-button{margin-left:var(--button-left-margin);padding:2px 0 0 4px;border:0;}.example-wrap .button-holder .copy-button::before,.example-wrap .test-arrow::before{filter:var(--copy-path-img-filter);}.example-wrap .button-holder .copy-button::before{content:var(--clipboard-image);}.example-wrap .button-holder .copy-button:hover::before,.example-wrap .test-arrow:hover::before{filter:var(--copy-path-img-hover-filter);}.example-wrap .button-holder .copy-button.clicked::before{content:var(--checkmark-image);padding-right:5px;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}@keyframes targetfadein{from{background-color:var(--main-background-color);}10%{background-color:var(--target-border-color);}to{background-color:var(--target-background-color);}}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);animation:0.65s cubic-bezier(0,0,0.1,1.0) 0.1s targetfadein;}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}.src-sidebar-title{position:sticky;top:0;display:flex;padding:8px 8px 0 48px;margin-bottom:7px;background:var(--sidebar-background-color);border-bottom:1px solid var(--border-color);}#settings-menu,#help-button{margin-left:var(--button-left-margin);display:flex;}#sidebar-button{display:none;line-height:0;}.hide-sidebar #sidebar-button,.src #sidebar-button{display:flex;margin-right:4px;position:fixed;left:6px;height:34px;width:34px;background-color:var(--main-background-color);z-index:1;}.src #sidebar-button{left:8px;z-index:calc(var(--desktop-sidebar-z-index) + 1);}.hide-sidebar .src #sidebar-button{position:static;}#settings-menu>a,#help-button>a,#sidebar-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:var(--button-border-radius);color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus,#sidebar-button>a:hover,#sidebar-button>a:focus{border-color:var(--settings-button-border-focus);}#settings-menu>a{line-height:0;font-size:0;}#settings-menu>a:before{content:url('data:image/svg+xml,\ {if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost,);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1,)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let searchIndexDeprecated;let searchIndexEmptyDesc;let functionTypeFingerprint;let currentResults;const typeNameIdMap=new Map();const ALIASES=new Map();const typeNameIdOfArray=buildTypeMapIndex("array");const typeNameIdOfSlice=buildTypeMapIndex("slice");const typeNameIdOfArrayOrSlice=buildTypeMapIndex("[]");const typeNameIdOfTuple=buildTypeMapIndex("tuple");const typeNameIdOfUnit=buildTypeMapIndex("unit");const typeNameIdOfTupleOrUnit=buildTypeMapIndex("()");const typeNameIdOfFn=buildTypeMapIndex("fn");const typeNameIdOfFnMut=buildTypeMapIndex("fnmut");const typeNameIdOfFnOnce=buildTypeMapIndex("fnonce");const typeNameIdOfHof=buildTypeMapIndex("->");function buildTypeMapIndex(name,isAssocType){if(name===""||name===null){return null}if(typeNameIdMap.has(name)){const obj=typeNameIdMap.get(name);obj.assocOnly=isAssocType&&obj.assocOnly;return obj.id}else{const id=typeNameIdMap.size;typeNameIdMap.set(name,{id,assocOnly:isAssocType});return id}}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return"=,>-])".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function consumeIdent(parserState){REGEX_IDENT.lastIndex=parserState.pos;const match=parserState.userQuery.match(REGEX_IDENT);if(match){parserState.pos+=match[0].length;return true}return false}function isSeparatorCharacter(c){return c===","||c==="="}function isPathSeparator(c){return c===":"||c===" "}function prevIs(parserState,lookingFor){let pos=parserState.pos;while(pos>0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(c!==" "){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function skipWhitespace(parserState){while(parserState.pos0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}const bindingName=parserState.isInBinding;parserState.isInBinding=null;return makePrimitiveElement("never",{bindingName})}const quadcolon=/::\s*::/.exec(path);if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(path.endsWith("::")){throw["Paths cannot end with ","::"]}else if(quadcolon!==null){throw["Unexpected ",quadcolon[0]]}const pathSegments=path.split(/(?:::\s*)|(?:\s+(?:::\s*)?)/);if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}const bindingName=parserState.isInBinding;parserState.isInBinding=null;const bindings=new Map();const pathLast=pathSegments[pathSegments.length-1];return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast,normalizedPathLast:pathLast.replace(/_/g,""),generics:generics.filter(gen=>{if(gen.bindingName!==null){if(gen.name!==null){gen.bindingName.generics.unshift(gen)}bindings.set(gen.bindingName.name,gen.bindingName.generics);return false}return true}),bindings,typeFilter,bindingName,}}function getIdentEndPosition(parserState){let afterIdent=consumeIdent(parserState);let end=parserState.pos;let macroExclamation=-1;while(parserState.pos0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]," (not a valid identifier)"]}else{throw["Unexpected ",c," (not a valid identifier)"]}parserState.pos+=1;afterIdent=consumeIdent(parserState);end=parserState.pos}if(macroExclamation!==-1){if(parserState.typeFilter===null){parserState.typeFilter="macro"}else if(parserState.typeFilter!=="macro"){throw["Invalid search type: macro ","!"," and ",parserState.typeFilter," both specified",]}end=macroExclamation}return end}function getFilteredNextElem(query,parserState,elems,isInGenerics){const start=parserState.pos;if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){throw["Expected type filter before ",":"]}getNextElem(query,parserState,elems,isInGenerics);if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}if(elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;getNextElem(query,parserState,elems,isInGenerics)}}function getNextElem(query,parserState,elems,isInGenerics){const generics=[];skipWhitespace(parserState);let start=parserState.pos;let end;if("[(".indexOf(parserState.userQuery[parserState.pos])!==-1){let endChar=")";let name="()";let friendlyName="tuple";if(parserState.userQuery[parserState.pos]==="["){endChar="]";name="[]";friendlyName="slice"}parserState.pos+=1;const{foundSeparator}=getItemsBefore(query,parserState,generics,endChar);const typeFilter=parserState.typeFilter;const bindingName=parserState.isInBinding;parserState.typeFilter=null;parserState.isInBinding=null;for(const gen of generics){if(gen.bindingName!==null){throw["Type parameter ","=",` cannot be within ${friendlyName} `,name]}}if(name==="()"&&!foundSeparator&&generics.length===1&&typeFilter===null){elems.push(generics[0])}else if(name==="()"&&generics.length===1&&generics[0].name==="->"){generics[0].typeFilter=typeFilter;elems.push(generics[0])}else{if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive ",name," and ",typeFilter," both specified",]}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}elems.push(makePrimitiveElement(name,{bindingName,generics}))}}else if(parserState.userQuery[parserState.pos]==="&"){if(parserState.typeFilter!==null&&parserState.typeFilter!=="primitive"){throw["Invalid search type: primitive ","&"," and ",parserState.typeFilter," both specified",]}parserState.typeFilter=null;parserState.pos+=1;let c=parserState.userQuery[parserState.pos];while(c===" "&&parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}else if(parserState.pos=end){throw["Found generics without a path"]}if(parserState.isInBinding){throw["Unexpected ","("," after ","="]}parserState.pos+=1;const typeFilter=parserState.typeFilter;parserState.typeFilter=null;getItemsBefore(query,parserState,generics,")");skipWhitespace(parserState);if(isReturnArrow(parserState)){parserState.pos+=2;skipWhitespace(parserState);getFilteredNextElem(query,parserState,generics,isInGenerics);generics[generics.length-1].bindingName=makePrimitiveElement("output")}else{generics.push(makePrimitiveElement(null,{bindingName:makePrimitiveElement("output"),typeFilter:null,}))}parserState.typeFilter=typeFilter}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}if(parserState.userQuery[parserState.pos]==="="){if(parserState.isInBinding){throw["Cannot write ","="," twice in a binding"]}if(!isInGenerics){throw["Type parameter ","="," must be within generics list"]}const name=parserState.userQuery.slice(start,end).trim();if(name==="!"){throw["Type parameter ","="," key cannot be ","!"," never type"]}if(name.includes("!")){throw["Type parameter ","="," key cannot be ","!"," macro"]}if(name.includes("::")){throw["Type parameter ","="," key cannot contain ","::"," path"]}if(name.includes(":")){throw["Type parameter ","="," key cannot contain ",":"," type"]}parserState.isInBinding={name,generics}}else{elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics,),)}}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let foundSeparator=false;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;const oldIsInBinding=parserState.isInBinding;parserState.isInBinding=null;let hofParameters=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===")"){extra="("}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"," after ","="]}hofParameters=[...elems];elems.length=0;parserState.pos+=2;foundStopChar=true;foundSeparator=false;continue}else if(c===" "){parserState.pos+=1;continue}else if(isSeparatorCharacter(c)){parserState.pos+=1;foundStopChar=true;foundSeparator=true;continue}else if(c===":"&&isPathStart(parserState)){throw["Unexpected ","::",": paths cannot start with ","::"]}else if(isEndCharacter(c)){throw["Unexpected ",c," after ",extra]}if(!foundStopChar){let extra=[];if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",",",", ","=",", or ",endChar,...extra,", found ",c,]}throw["Expected ",","," or ","=",...extra,", found ",c,]}const posBefore=parserState.pos;getFilteredNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;if(hofParameters){foundSeparator=false;if([...elems,...hofParameters].some(x=>x.bindingName)||parserState.isInBinding){throw["Unexpected ","="," within ","->"]}const hofElem=makePrimitiveElement("->",{generics:hofParameters,bindings:new Map([["output",[...elems]]]),typeFilter:null,});elems.length=0;elems[0]=hofElem}parserState.typeFilter=oldTypeFilter;parserState.isInBinding=oldIsInBinding;return{foundSeparator}}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();const match=query.match(REGEX_INVALID_TYPE_FILTER);if(match){throw["Unexpected ",match[0]," in type filter (before ",":",")",]}}function parseInput(query,parserState){let foundStopChar=true;while(parserState.pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}else if(parserState.pos>0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]]}throw["Unexpected ",c]}else if(c===" "){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;getFilteredNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,typeFingerprint:new Uint32Array(4),}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&rawSearchIndex.has(elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}for(const constraints of elem.bindings.values()){for(const constraint of constraints){convertTypeFilterOnElem(constraint)}}}userQuery=userQuery.trim().replace(/\r|\n|\t/g," ");const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,isInBinding:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}async function execQuery(parsedQuery,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=res[2]+"|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}if(obj.ty===TY_IMPORT&&duplicates.has(res[2])){continue}if(duplicates.has(res[2]+"|"+TY_IMPORT)){continue}duplicates.add(obj.fullPath);duplicates.add(res[2]);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}async function sortResults(results,isType,preferredCrate){const userQuery=parsedQuery.userQuery;const result_list=[];for(const result of results.values()){result.item=searchIndex[result.id];result.word=searchIndex[result.id].word;result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=searchIndexDeprecated.get(aaa.item.crate).contains(aaa.item.bitIndex);b=searchIndexDeprecated.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=searchIndexEmptyDesc.get(aaa.item.crate).contains(aaa.item.bitIndex);b=searchIndexEmptyDesc.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});return transformResults(result_list)}function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return false}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return!solutionCb||solutionCb(mgens)}if(!fnTypesIn||fnTypesIn.length===0){return false}const ql=queryElems.length;const fl=fnTypesIn.length;if(ql===1&&queryElems[0].generics.length===0&&queryElems[0].bindings.size===0){const queryElem=queryElems[0];for(const fnType of fnTypesIn){if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}if(fnType.id<0&&queryElem.id<0){if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){continue}const mgensScratch=new Map(mgens);mgensScratch.set(fnType.id,queryElem.id);if(!solutionCb||solutionCb(mgensScratch)){return true}}else if(!solutionCb||solutionCb(mgens?new Map(mgens):null)){return true}}for(const fnType of fnTypesIn){if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}if(fnType.id<0){if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){continue}const mgensScratch=new Map(mgens);mgensScratch.set(fnType.id,0);if(unifyFunctionTypes(whereClause[(-fnType.id)-1],queryElems,whereClause,mgensScratch,solutionCb,unboxingDepth+1,)){return true}}else if(unifyFunctionTypes([...fnType.generics,...Array.from(fnType.bindings.values()).flat()],queryElems,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth+1,)){return true}}return false}const fnTypes=fnTypesIn.slice();const flast=fl-1;const qlast=ql-1;const queryElem=queryElems[qlast];let queryElemsTmp=null;for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}let mgensScratch;if(fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(fnType.id)&&mgensScratch.get(fnType.id)!==queryElem.id){continue}mgensScratch.set(fnType.id,queryElem.id)}else{mgensScratch=mgens}fnTypes[i]=fnTypes[flast];fnTypes.length=flast;if(!queryElemsTmp){queryElemsTmp=queryElems.slice(0,qlast)}const passesUnification=unifyFunctionTypes(fnTypes,queryElemsTmp,whereClause,mgensScratch,mgensScratch=>{if(fnType.generics.length===0&&queryElem.generics.length===0&&fnType.bindings.size===0&&queryElem.bindings.size===0){return!solutionCb||solutionCb(mgensScratch)}const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){const passesUnification=unifyFunctionTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,);if(passesUnification){return true}}return false},unboxingDepth,);if(passesUnification){return true}fnTypes[flast]=fnTypes[i];fnTypes[i]=fnType;fnTypes.length=fl}for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}let mgensScratch;if(fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(fnType.id)&&mgensScratch.get(fnType.id)!==0){continue}mgensScratch.set(fnType.id,0)}else{mgensScratch=mgens}const generics=fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;const bindings=fnType.bindings?Array.from(fnType.bindings.values()).flat():[];const passesUnification=unifyFunctionTypes(fnTypes.toSpliced(i,1,...generics,...bindings),queryElems,whereClause,mgensScratch,solutionCb,unboxingDepth+1,);if(passesUnification){return true}}return false}function unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgensIn){if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id<0&&queryElem.id<0){if(mgensIn){if(mgensIn.has(fnType.id)&&mgensIn.get(fnType.id)!==queryElem.id){return false}for(const[fid,qid]of mgensIn.entries()){if(fnType.id!==fid&&queryElem.id===qid){return false}if(fnType.id===fid&&queryElem.id!==qid){return false}}}return true}else{if(queryElem.id===typeNameIdOfArrayOrSlice&&(fnType.id===typeNameIdOfSlice||fnType.id===typeNameIdOfArray)){}else if(queryElem.id===typeNameIdOfTupleOrUnit&&(fnType.id===typeNameIdOfTuple||fnType.id===typeNameIdOfUnit)){}else if(queryElem.id===typeNameIdOfHof&&(fnType.id===typeNameIdOfFn||fnType.id===typeNameIdOfFnMut||fnType.id===typeNameIdOfFnOnce)){}else if(fnType.id!==queryElem.id||queryElem.id===null){return false}if((fnType.generics.length+fnType.bindings.size)===0&&queryElem.generics.length!==0){return false}if(fnType.bindings.size0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i0){let mgensSolutionSet=[mgensIn];for(const[name,constraints]of queryElem.bindings.entries()){if(mgensSolutionSet.length===0){return false}if(!fnType.bindings.has(name)){return false}const fnTypeBindings=fnType.bindings.get(name);mgensSolutionSet=mgensSolutionSet.flatMap(mgens=>{const newSolutions=[];unifyFunctionTypes(fnTypeBindings,constraints,whereClause,mgens,newMgens=>{newSolutions.push(newMgens);return false},unboxingDepth,);return newSolutions})}if(mgensSolutionSet.length===0){return false}const binds=Array.from(fnType.bindings.entries()).flatMap(entry=>{const[name,constraints]=entry;if(queryElem.bindings.has(name)){return[]}else{return constraints}});if(simplifiedGenerics.length>0){simplifiedGenerics=[...simplifiedGenerics,...binds]}else{simplifiedGenerics=binds}return{simplifiedGenerics,mgens:mgensSolutionSet}}return{simplifiedGenerics,mgens:[mgensIn]}}function unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return false}if(fnType.id<0&&queryElem.id>=0){if(!whereClause){return false}if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){return false}const mgensTmp=new Map(mgens);mgensTmp.set(fnType.id,null);return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause,mgensTmp,unboxingDepth,)}else if(fnType.generics.length>0||fnType.bindings.size>0){const simplifiedGenerics=[...fnType.generics,...Array.from(fnType.bindings.values()).flat(),];return checkIfInList(simplifiedGenerics,queryElem,whereClause,mgens,unboxingDepth,)}return false}function checkIfInList(list,elem,whereClause,mgens,unboxingDepth){for(const entry of list){if(checkType(entry,elem,whereClause,mgens,unboxingDepth)){return true}}return false}function checkType(row,elem,whereClause,mgens,unboxingDepth){if(unboxingDepth>=UNBOXING_LIMIT){return false}if(row.bindings.size===0&&elem.bindings.size===0){if(elem.id<0&&mgens===null){return row.id<0||checkIfInList(row.generics,elem,whereClause,mgens,unboxingDepth+1,)}if(row.id>0&&elem.id>0&&elem.pathWithoutLast.length===0&&typePassesFilter(elem.typeFilter,row.ty)&&elem.generics.length===0&&elem.id!==typeNameIdOfArrayOrSlice&&elem.id!==typeNameIdOfTupleOrUnit&&elem.id!==typeNameIdOfHof){return row.id===elem.id||checkIfInList(row.generics,elem,whereClause,mgens,unboxingDepth,)}}return unifyFunctionTypes([row],[elem],whereClause,mgens,null,unboxingDepth)}function checkPath(contains,ty){if(contains.length===0){return 0}const maxPathEditDistance=Math.floor(contains.reduce((acc,next)=>acc+next.length,0)/3,);let ret_dist=maxPathEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;pathiter:for(let i=length-clength;i>=0;i-=1){let dist_total=0;for(let x=0;xmaxPathEditDistance){continue pathiter}dist_total+=dist}}ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}return ret_dist>maxPathEditDistance?null:ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,descShard:item.descShard,descIndex:item.descIndex,exactPath:item.exactPath,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,bitIndex:item.bitIndex,implDisambiguator:item.implDisambiguator,}}async function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{return searchIndexEmptyDesc.get(alias.crate).contains(alias.bitIndex)?"":searchState.loadDesc(alias)};const[crateDescs,descs]=await Promise.all([Promise.all(crateAliases.map(fetchDesc)),Promise.all(aliases.map(fetchDesc)),]);const pushFunc=alias=>{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach((alias,i)=>{alias.desc=descs[i]});aliases.forEach(pushFunc);crateAliases.forEach((alias,i)=>{alias.desc=crateDescs[i]});crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){if(dist<=maxEditDistance||index!==-1){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance,){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let path_dist=0;const fullId=row.id;const tfpDist=compareTypeFingerprints(fullId,parsedQuery.typeFingerprint,);if(tfpDist!==null){const in_args=row.type&&row.type.inputs&&checkIfInList(row.type.inputs,elem,row.type.where_clause,null,0);const returned=row.type&&row.type.output&&checkIfInList(row.type.output,elem,row.type.where_clause,null,0);if(in_args){results_in_args.max_dist=Math.max(results_in_args.max_dist||0,tfpDist);const maxDist=results_in_args.sizenormalizedIndex&&normalizedIndex!==-1)){index=normalizedIndex}if(elem.fullPath.length>1){path_dist=checkPath(elem.pathWithoutLast,row);if(path_dist===null){return}}if(parsedQuery.literalSearch){if(row.word===elem.pathLast){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}const dist=editDistance(row.normalizedName,elem.normalizedPathLast,maxEditDistance);if(index===-1&&dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}const tfpDist=compareTypeFingerprints(row.id,parsedQuery.typeFingerprint,);if(tfpDist===null){return}if(results.size>=MAX_RESULTS&&tfpDist>results.max_dist){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems,row.type.where_clause,null,mgens=>{return unifyFunctionTypes(row.type.output,parsedQuery.returned,row.type.where_clause,mgens,null,0,)},0,)){return}results.max_dist=Math.max(results.max_dist||0,tfpDist);addIntoResults(results,row.id,pos,0,tfpDist,0,Number.MAX_VALUE)}function innerRunQuery(){const queryLen=parsedQuery.elems.reduce((acc,next)=>acc+next.pathLast.length,0)+parsedQuery.returned.reduce((acc,next)=>acc+next.pathLast.length,0);const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();function convertNameToId(elem,isAssocType){const loweredName=elem.pathLast.toLowerCase();if(typeNameIdMap.has(loweredName)&&(isAssocType||!typeNameIdMap.get(loweredName).assocOnly)){elem.id=typeNameIdMap.get(loweredName).id}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,{id,assocOnly}]of typeNameIdMap){const dist=Math.min(editDistance(name,loweredName,maxEditDistance),editDistance(name,elem.normalizedPathLast,maxEditDistance),);if(dist<=matchDist&&dist<=maxEditDistance&&(isAssocType||!assocOnly)){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0&&elem.bindings.size===0)||elem.typeFilter===TY_GENERIC){if(genericSymbols.has(elem.name)){elem.id=genericSymbols.get(elem.name)}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.name,elem.id)}if(elem.typeFilter===-1&&elem.name.length>=3){const maxPartDistance=Math.floor(elem.name.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of typeNameIdMap.keys()){const dist=editDistance(name,elem.name,maxPartDistance);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}elem.bindings=new Map(Array.from(elem.bindings.entries()).map(entry=>{const[name,constraints]=entry;if(!typeNameIdMap.has(name)){parsedQuery.error=["Type parameter ",name," does not exist",];return[null,[]]}for(const elem2 of constraints){convertNameToId(elem2)}return[typeNameIdMap.get(name).id,constraints]}),)}const fps=new Set();for(const elem of parsedQuery.elems){convertNameToId(elem);buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint,fps)}for(const elem of parsedQuery.returned){convertNameToId(elem);buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint,fps)}if(parsedQuery.foundElems===1&&parsedQuery.returned.length===0){if(parsedQuery.elems.length===1){const elem=parsedQuery.elems[0];for(let i=0,nSearchIndex=searchIndex.length;i0){const sortQ=(a,b)=>{const ag=a.generics.length===0&&a.bindings.size===0;const bg=b.generics.length===0&&b.bindings.size===0;if(ag!==bg){return ag-bg}const ai=a.id>0;const bi=b.id>0;return ai-bi};parsedQuery.elems.sort(sortQ);parsedQuery.returned.sort(sortQ);for(let i=0,nSearchIndex=searchIndex.length;i{const descs=await Promise.all(list.map(result=>{return searchIndexEmptyDesc.get(result.crate).contains(result.bitIndex)?"":searchState.loadDesc(result)}));for(const[i,result]of list.entries()){result.desc=descs[i]}}));if(parsedQuery.error!==null&&ret.others.length!==0){ret.query.error=null}return ret}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}function buildHrefAndPath(item){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;let exactPath=item.exactPath;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor=type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;exactPath=`${myparent.exactPath}::${myparent.name}`;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}if(item.implDisambiguator!==null){anchor=item.implDisambiguator+"/"+anchor}href=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html#"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href,`${exactPath}::${name}`]}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}async function addTab(array,query,display){const extraClass=display?" active":"";const output=document.createElement("div");if(array.length>0){output.className="search-results "+extraClass;for(const item of array){const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
\ +"use strict";if(!Array.prototype.toSpliced){Array.prototype.toSpliced=function(){const me=this.slice();Array.prototype.splice.apply(me,arguments);return me}}(function(){const itemTypes=["keyword","primitive","mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","associatedtype","constant","associatedconstant","union","foreigntype","existential","attr","derive","traitalias","generic",];const longItemTypes=["keyword","primitive type","module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","assoc type","constant","assoc const","union","foreign type","existential type","attribute macro","derive macro","trait alias",];const TY_GENERIC=itemTypes.indexOf("generic");const TY_IMPORT=itemTypes.indexOf("import");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";const UNBOXING_LIMIT=5;const REGEX_IDENT=/\p{ID_Start}\p{ID_Continue}*|_\p{ID_Continue}+/uy;const REGEX_INVALID_TYPE_FILTER=/[^a-z]/ui;function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost,);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1,)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let searchIndexDeprecated;let searchIndexEmptyDesc;let functionTypeFingerprint;let currentResults;const typeNameIdMap=new Map();const ALIASES=new Map();const typeNameIdOfArray=buildTypeMapIndex("array");const typeNameIdOfSlice=buildTypeMapIndex("slice");const typeNameIdOfArrayOrSlice=buildTypeMapIndex("[]");const typeNameIdOfTuple=buildTypeMapIndex("tuple");const typeNameIdOfUnit=buildTypeMapIndex("unit");const typeNameIdOfTupleOrUnit=buildTypeMapIndex("()");const typeNameIdOfFn=buildTypeMapIndex("fn");const typeNameIdOfFnMut=buildTypeMapIndex("fnmut");const typeNameIdOfFnOnce=buildTypeMapIndex("fnonce");const typeNameIdOfHof=buildTypeMapIndex("->");function buildTypeMapIndex(name,isAssocType){if(name===""||name===null){return null}if(typeNameIdMap.has(name)){const obj=typeNameIdMap.get(name);obj.assocOnly=isAssocType&&obj.assocOnly;return obj.id}else{const id=typeNameIdMap.size;typeNameIdMap.set(name,{id,assocOnly:isAssocType});return id}}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return"=,>-])".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function consumeIdent(parserState){REGEX_IDENT.lastIndex=parserState.pos;const match=parserState.userQuery.match(REGEX_IDENT);if(match){parserState.pos+=match[0].length;return true}return false}function isSeparatorCharacter(c){return c===","||c==="="}function isPathSeparator(c){return c===":"||c===" "}function prevIs(parserState,lookingFor){let pos=parserState.pos;while(pos>0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(c!==" "){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function skipWhitespace(parserState){while(parserState.pos0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}const bindingName=parserState.isInBinding;parserState.isInBinding=null;return makePrimitiveElement("never",{bindingName})}const quadcolon=/::\s*::/.exec(path);if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(path.endsWith("::")){throw["Paths cannot end with ","::"]}else if(quadcolon!==null){throw["Unexpected ",quadcolon[0]]}const pathSegments=path.split(/(?:::\s*)|(?:\s+(?:::\s*)?)/);if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}const bindingName=parserState.isInBinding;parserState.isInBinding=null;const bindings=new Map();const pathLast=pathSegments[pathSegments.length-1];return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast,normalizedPathLast:pathLast.replace(/_/g,""),generics:generics.filter(gen=>{if(gen.bindingName!==null){if(gen.name!==null){gen.bindingName.generics.unshift(gen)}bindings.set(gen.bindingName.name,gen.bindingName.generics);return false}return true}),bindings,typeFilter,bindingName,}}function getIdentEndPosition(parserState){let afterIdent=consumeIdent(parserState);let end=parserState.pos;let macroExclamation=-1;while(parserState.pos0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]," (not a valid identifier)"]}else{throw["Unexpected ",c," (not a valid identifier)"]}parserState.pos+=1;afterIdent=consumeIdent(parserState);end=parserState.pos}if(macroExclamation!==-1){if(parserState.typeFilter===null){parserState.typeFilter="macro"}else if(parserState.typeFilter!=="macro"){throw["Invalid search type: macro ","!"," and ",parserState.typeFilter," both specified",]}end=macroExclamation}return end}function getFilteredNextElem(query,parserState,elems,isInGenerics){const start=parserState.pos;if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){throw["Expected type filter before ",":"]}getNextElem(query,parserState,elems,isInGenerics);if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}if(elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;getNextElem(query,parserState,elems,isInGenerics)}}function getNextElem(query,parserState,elems,isInGenerics){const generics=[];skipWhitespace(parserState);let start=parserState.pos;let end;if("[(".indexOf(parserState.userQuery[parserState.pos])!==-1){let endChar=")";let name="()";let friendlyName="tuple";if(parserState.userQuery[parserState.pos]==="["){endChar="]";name="[]";friendlyName="slice"}parserState.pos+=1;const{foundSeparator}=getItemsBefore(query,parserState,generics,endChar);const typeFilter=parserState.typeFilter;const bindingName=parserState.isInBinding;parserState.typeFilter=null;parserState.isInBinding=null;for(const gen of generics){if(gen.bindingName!==null){throw["Type parameter ","=",` cannot be within ${friendlyName} `,name]}}if(name==="()"&&!foundSeparator&&generics.length===1&&typeFilter===null){elems.push(generics[0])}else if(name==="()"&&generics.length===1&&generics[0].name==="->"){generics[0].typeFilter=typeFilter;elems.push(generics[0])}else{if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive ",name," and ",typeFilter," both specified",]}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}elems.push(makePrimitiveElement(name,{bindingName,generics}))}}else if(parserState.userQuery[parserState.pos]==="&"){if(parserState.typeFilter!==null&&parserState.typeFilter!=="primitive"){throw["Invalid search type: primitive ","&"," and ",parserState.typeFilter," both specified",]}parserState.typeFilter=null;parserState.pos+=1;let c=parserState.userQuery[parserState.pos];while(c===" "&&parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}else if(parserState.pos=end){throw["Found generics without a path"]}if(parserState.isInBinding){throw["Unexpected ","("," after ","="]}parserState.pos+=1;const typeFilter=parserState.typeFilter;parserState.typeFilter=null;getItemsBefore(query,parserState,generics,")");skipWhitespace(parserState);if(isReturnArrow(parserState)){parserState.pos+=2;skipWhitespace(parserState);getFilteredNextElem(query,parserState,generics,isInGenerics);generics[generics.length-1].bindingName=makePrimitiveElement("output")}else{generics.push(makePrimitiveElement(null,{bindingName:makePrimitiveElement("output"),typeFilter:null,}))}parserState.typeFilter=typeFilter}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}if(parserState.userQuery[parserState.pos]==="="){if(parserState.isInBinding){throw["Cannot write ","="," twice in a binding"]}if(!isInGenerics){throw["Type parameter ","="," must be within generics list"]}const name=parserState.userQuery.slice(start,end).trim();if(name==="!"){throw["Type parameter ","="," key cannot be ","!"," never type"]}if(name.includes("!")){throw["Type parameter ","="," key cannot be ","!"," macro"]}if(name.includes("::")){throw["Type parameter ","="," key cannot contain ","::"," path"]}if(name.includes(":")){throw["Type parameter ","="," key cannot contain ",":"," type"]}parserState.isInBinding={name,generics}}else{elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics,),)}}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let foundSeparator=false;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;const oldIsInBinding=parserState.isInBinding;parserState.isInBinding=null;let hofParameters=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===")"){extra="("}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"," after ","="]}hofParameters=[...elems];elems.length=0;parserState.pos+=2;foundStopChar=true;foundSeparator=false;continue}else if(c===" "){parserState.pos+=1;continue}else if(isSeparatorCharacter(c)){parserState.pos+=1;foundStopChar=true;foundSeparator=true;continue}else if(c===":"&&isPathStart(parserState)){throw["Unexpected ","::",": paths cannot start with ","::"]}else if(isEndCharacter(c)){throw["Unexpected ",c," after ",extra]}if(!foundStopChar){let extra=[];if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",",",", ","=",", or ",endChar,...extra,", found ",c,]}throw["Expected ",","," or ","=",...extra,", found ",c,]}const posBefore=parserState.pos;getFilteredNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;if(hofParameters){foundSeparator=false;if([...elems,...hofParameters].some(x=>x.bindingName)||parserState.isInBinding){throw["Unexpected ","="," within ","->"]}const hofElem=makePrimitiveElement("->",{generics:hofParameters,bindings:new Map([["output",[...elems]]]),typeFilter:null,});elems.length=0;elems[0]=hofElem}parserState.typeFilter=oldTypeFilter;parserState.isInBinding=oldIsInBinding;return{foundSeparator}}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();const match=query.match(REGEX_INVALID_TYPE_FILTER);if(match){throw["Unexpected ",match[0]," in type filter (before ",":",")",]}}function parseInput(query,parserState){let foundStopChar=true;while(parserState.pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}else if(parserState.pos>0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]]}throw["Unexpected ",c]}else if(c===" "){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;getFilteredNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,typeFingerprint:new Uint32Array(4),}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&rawSearchIndex.has(elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}for(const constraints of elem.bindings.values()){for(const constraint of constraints){convertTypeFilterOnElem(constraint)}}}userQuery=userQuery.trim().replace(/\r|\n|\t/g," ");const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,isInBinding:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}async function execQuery(parsedQuery,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=res[2]+"|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}if(obj.ty===TY_IMPORT&&duplicates.has(res[2])){continue}if(duplicates.has(res[2]+"|"+TY_IMPORT)){continue}duplicates.add(obj.fullPath);duplicates.add(res[2]);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}async function sortResults(results,isType,preferredCrate){const userQuery=parsedQuery.userQuery;const casedUserQuery=parsedQuery.original;const result_list=[];for(const result of results.values()){result.item=searchIndex[result.id];result.word=searchIndex[result.id].word;result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.item.name!==casedUserQuery);b=(bbb.item.name!==casedUserQuery);if(a!==b){return a-b}a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=searchIndexDeprecated.get(aaa.item.crate).contains(aaa.item.bitIndex);b=searchIndexDeprecated.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=searchIndexEmptyDesc.get(aaa.item.crate).contains(aaa.item.bitIndex);b=searchIndexEmptyDesc.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});return transformResults(result_list)}function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return false}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return!solutionCb||solutionCb(mgens)}if(!fnTypesIn||fnTypesIn.length===0){return false}const ql=queryElems.length;const fl=fnTypesIn.length;if(ql===1&&queryElems[0].generics.length===0&&queryElems[0].bindings.size===0){const queryElem=queryElems[0];for(const fnType of fnTypesIn){if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}if(fnType.id<0&&queryElem.id<0){if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){continue}const mgensScratch=new Map(mgens);mgensScratch.set(fnType.id,queryElem.id);if(!solutionCb||solutionCb(mgensScratch)){return true}}else if(!solutionCb||solutionCb(mgens?new Map(mgens):null)){return true}}for(const fnType of fnTypesIn){if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}if(fnType.id<0){if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){continue}const mgensScratch=new Map(mgens);mgensScratch.set(fnType.id,0);if(unifyFunctionTypes(whereClause[(-fnType.id)-1],queryElems,whereClause,mgensScratch,solutionCb,unboxingDepth+1,)){return true}}else if(unifyFunctionTypes([...fnType.generics,...Array.from(fnType.bindings.values()).flat()],queryElems,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth+1,)){return true}}return false}const fnTypes=fnTypesIn.slice();const flast=fl-1;const qlast=ql-1;const queryElem=queryElems[qlast];let queryElemsTmp=null;for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}let mgensScratch;if(fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(fnType.id)&&mgensScratch.get(fnType.id)!==queryElem.id){continue}mgensScratch.set(fnType.id,queryElem.id)}else{mgensScratch=mgens}fnTypes[i]=fnTypes[flast];fnTypes.length=flast;if(!queryElemsTmp){queryElemsTmp=queryElems.slice(0,qlast)}const passesUnification=unifyFunctionTypes(fnTypes,queryElemsTmp,whereClause,mgensScratch,mgensScratch=>{if(fnType.generics.length===0&&queryElem.generics.length===0&&fnType.bindings.size===0&&queryElem.bindings.size===0){return!solutionCb||solutionCb(mgensScratch)}const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){const passesUnification=unifyFunctionTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,);if(passesUnification){return true}}return false},unboxingDepth,);if(passesUnification){return true}fnTypes[flast]=fnTypes[i];fnTypes[i]=fnType;fnTypes.length=fl}for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}let mgensScratch;if(fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(fnType.id)&&mgensScratch.get(fnType.id)!==0){continue}mgensScratch.set(fnType.id,0)}else{mgensScratch=mgens}const generics=fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;const bindings=fnType.bindings?Array.from(fnType.bindings.values()).flat():[];const passesUnification=unifyFunctionTypes(fnTypes.toSpliced(i,1,...generics,...bindings),queryElems,whereClause,mgensScratch,solutionCb,unboxingDepth+1,);if(passesUnification){return true}}return false}function unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgensIn){if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id<0&&queryElem.id<0){if(mgensIn){if(mgensIn.has(fnType.id)&&mgensIn.get(fnType.id)!==queryElem.id){return false}for(const[fid,qid]of mgensIn.entries()){if(fnType.id!==fid&&queryElem.id===qid){return false}if(fnType.id===fid&&queryElem.id!==qid){return false}}}return true}else{if(queryElem.id===typeNameIdOfArrayOrSlice&&(fnType.id===typeNameIdOfSlice||fnType.id===typeNameIdOfArray)){}else if(queryElem.id===typeNameIdOfTupleOrUnit&&(fnType.id===typeNameIdOfTuple||fnType.id===typeNameIdOfUnit)){}else if(queryElem.id===typeNameIdOfHof&&(fnType.id===typeNameIdOfFn||fnType.id===typeNameIdOfFnMut||fnType.id===typeNameIdOfFnOnce)){}else if(fnType.id!==queryElem.id||queryElem.id===null){return false}if((fnType.generics.length+fnType.bindings.size)===0&&queryElem.generics.length!==0){return false}if(fnType.bindings.size0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i0){let mgensSolutionSet=[mgensIn];for(const[name,constraints]of queryElem.bindings.entries()){if(mgensSolutionSet.length===0){return false}if(!fnType.bindings.has(name)){return false}const fnTypeBindings=fnType.bindings.get(name);mgensSolutionSet=mgensSolutionSet.flatMap(mgens=>{const newSolutions=[];unifyFunctionTypes(fnTypeBindings,constraints,whereClause,mgens,newMgens=>{newSolutions.push(newMgens);return false},unboxingDepth,);return newSolutions})}if(mgensSolutionSet.length===0){return false}const binds=Array.from(fnType.bindings.entries()).flatMap(entry=>{const[name,constraints]=entry;if(queryElem.bindings.has(name)){return[]}else{return constraints}});if(simplifiedGenerics.length>0){simplifiedGenerics=[...simplifiedGenerics,...binds]}else{simplifiedGenerics=binds}return{simplifiedGenerics,mgens:mgensSolutionSet}}return{simplifiedGenerics,mgens:[mgensIn]}}function unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return false}if(fnType.id<0&&queryElem.id>=0){if(!whereClause){return false}if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){return false}const mgensTmp=new Map(mgens);mgensTmp.set(fnType.id,null);return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause,mgensTmp,unboxingDepth,)}else if(fnType.generics.length>0||fnType.bindings.size>0){const simplifiedGenerics=[...fnType.generics,...Array.from(fnType.bindings.values()).flat(),];return checkIfInList(simplifiedGenerics,queryElem,whereClause,mgens,unboxingDepth,)}return false}function checkIfInList(list,elem,whereClause,mgens,unboxingDepth){for(const entry of list){if(checkType(entry,elem,whereClause,mgens,unboxingDepth)){return true}}return false}function checkType(row,elem,whereClause,mgens,unboxingDepth){if(unboxingDepth>=UNBOXING_LIMIT){return false}if(row.bindings.size===0&&elem.bindings.size===0){if(elem.id<0&&mgens===null){return row.id<0||checkIfInList(row.generics,elem,whereClause,mgens,unboxingDepth+1,)}if(row.id>0&&elem.id>0&&elem.pathWithoutLast.length===0&&typePassesFilter(elem.typeFilter,row.ty)&&elem.generics.length===0&&elem.id!==typeNameIdOfArrayOrSlice&&elem.id!==typeNameIdOfTupleOrUnit&&elem.id!==typeNameIdOfHof){return row.id===elem.id||checkIfInList(row.generics,elem,whereClause,mgens,unboxingDepth,)}}return unifyFunctionTypes([row],[elem],whereClause,mgens,null,unboxingDepth)}function checkPath(contains,ty){if(contains.length===0){return 0}const maxPathEditDistance=Math.floor(contains.reduce((acc,next)=>acc+next.length,0)/3,);let ret_dist=maxPathEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;pathiter:for(let i=length-clength;i>=0;i-=1){let dist_total=0;for(let x=0;xmaxPathEditDistance){continue pathiter}dist_total+=dist}}ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}return ret_dist>maxPathEditDistance?null:ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,descShard:item.descShard,descIndex:item.descIndex,exactPath:item.exactPath,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,bitIndex:item.bitIndex,implDisambiguator:item.implDisambiguator,}}async function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{return searchIndexEmptyDesc.get(alias.crate).contains(alias.bitIndex)?"":searchState.loadDesc(alias)};const[crateDescs,descs]=await Promise.all([Promise.all(crateAliases.map(fetchDesc)),Promise.all(aliases.map(fetchDesc)),]);const pushFunc=alias=>{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach((alias,i)=>{alias.desc=descs[i]});aliases.forEach(pushFunc);crateAliases.forEach((alias,i)=>{alias.desc=crateDescs[i]});crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){if(dist<=maxEditDistance||index!==-1){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance,){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let path_dist=0;const fullId=row.id;const tfpDist=compareTypeFingerprints(fullId,parsedQuery.typeFingerprint,);if(tfpDist!==null){const in_args=row.type&&row.type.inputs&&checkIfInList(row.type.inputs,elem,row.type.where_clause,null,0);const returned=row.type&&row.type.output&&checkIfInList(row.type.output,elem,row.type.where_clause,null,0);if(in_args){results_in_args.max_dist=Math.max(results_in_args.max_dist||0,tfpDist);const maxDist=results_in_args.sizenormalizedIndex&&normalizedIndex!==-1)){index=normalizedIndex}if(elem.fullPath.length>1){path_dist=checkPath(elem.pathWithoutLast,row);if(path_dist===null){return}}if(parsedQuery.literalSearch){if(row.word===elem.pathLast){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}const dist=editDistance(row.normalizedName,elem.normalizedPathLast,maxEditDistance);if(index===-1&&dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}const tfpDist=compareTypeFingerprints(row.id,parsedQuery.typeFingerprint,);if(tfpDist===null){return}if(results.size>=MAX_RESULTS&&tfpDist>results.max_dist){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems,row.type.where_clause,null,mgens=>{return unifyFunctionTypes(row.type.output,parsedQuery.returned,row.type.where_clause,mgens,null,0,)},0,)){return}results.max_dist=Math.max(results.max_dist||0,tfpDist);addIntoResults(results,row.id,pos,0,tfpDist,0,Number.MAX_VALUE)}function innerRunQuery(){const queryLen=parsedQuery.elems.reduce((acc,next)=>acc+next.pathLast.length,0)+parsedQuery.returned.reduce((acc,next)=>acc+next.pathLast.length,0);const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();function convertNameToId(elem,isAssocType){const loweredName=elem.pathLast.toLowerCase();if(typeNameIdMap.has(loweredName)&&(isAssocType||!typeNameIdMap.get(loweredName).assocOnly)){elem.id=typeNameIdMap.get(loweredName).id}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,{id,assocOnly}]of typeNameIdMap){const dist=Math.min(editDistance(name,loweredName,maxEditDistance),editDistance(name,elem.normalizedPathLast,maxEditDistance),);if(dist<=matchDist&&dist<=maxEditDistance&&(isAssocType||!assocOnly)){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0&&elem.bindings.size===0)||elem.typeFilter===TY_GENERIC){if(genericSymbols.has(elem.name)){elem.id=genericSymbols.get(elem.name)}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.name,elem.id)}if(elem.typeFilter===-1&&elem.name.length>=3){const maxPartDistance=Math.floor(elem.name.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of typeNameIdMap.keys()){const dist=editDistance(name,elem.name,maxPartDistance);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}elem.bindings=new Map(Array.from(elem.bindings.entries()).map(entry=>{const[name,constraints]=entry;if(!typeNameIdMap.has(name)){parsedQuery.error=["Type parameter ",name," does not exist",];return[null,[]]}for(const elem2 of constraints){convertNameToId(elem2)}return[typeNameIdMap.get(name).id,constraints]}),)}const fps=new Set();for(const elem of parsedQuery.elems){convertNameToId(elem);buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint,fps)}for(const elem of parsedQuery.returned){convertNameToId(elem);buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint,fps)}if(parsedQuery.foundElems===1&&parsedQuery.returned.length===0){if(parsedQuery.elems.length===1){const elem=parsedQuery.elems[0];for(let i=0,nSearchIndex=searchIndex.length;i0){const sortQ=(a,b)=>{const ag=a.generics.length===0&&a.bindings.size===0;const bg=b.generics.length===0&&b.bindings.size===0;if(ag!==bg){return ag-bg}const ai=a.id>0;const bi=b.id>0;return ai-bi};parsedQuery.elems.sort(sortQ);parsedQuery.returned.sort(sortQ);for(let i=0,nSearchIndex=searchIndex.length;i{const descs=await Promise.all(list.map(result=>{return searchIndexEmptyDesc.get(result.crate).contains(result.bitIndex)?"":searchState.loadDesc(result)}));for(const[i,result]of list.entries()){result.desc=descs[i]}}));if(parsedQuery.error!==null&&ret.others.length!==0){ret.query.error=null}return ret}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}function buildHrefAndPath(item){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;let exactPath=item.exactPath;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor=type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;exactPath=`${myparent.exactPath}::${myparent.name}`;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}if(item.implDisambiguator!==null){anchor=item.implDisambiguator+"/"+anchor}href=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html#"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href,`${exactPath}::${name}`]}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}async function addTab(array,query,display){const extraClass=display?" active":"";const output=document.createElement("div");if(array.length>0){output.className="search-results "+extraClass;for(const item of array){const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
\ ${item.alias} - see \
`}resultName.insertAdjacentHTML("beforeend",`
${alias}\ ${item.displayPath}${name}\ -
`);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)}}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return[output,array.length]}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}async function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const[ret_others,ret_in_args,ret_returned]=await Promise.all([addTab(results.others,results.query,true),addTab(results.in_args,results.query,false),addTab(results.returned,results.query,false),]);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";if(rawSearchIndex.size>1){crates=" in 
"}let output=`

Results${crates}

`;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

Query parser error: "${error.join("")}".

`;output+="
"+makeTabHeader(0,"In Names",ret_others[1])+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

`}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

"+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

`}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}async function search(forced){const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="\""+query.original+"\" Search - Rust";updateSearchHistory(buildUrl(query.original,filterCrates));await showResults(await execQuery(query,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){return types.length>0?types.map(type=>buildItemSearchType(type,lowercasePaths)):EMPTY_GENERICS_ARRAY}const EMPTY_BINDINGS_MAP=new Map();const EMPTY_GENERICS_ARRAY=[];let TYPES_POOL=new Map();function buildItemSearchType(type,lowercasePaths,isAssocType){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;const BINDINGS_DATA=2;let pathIndex,generics,bindings;if(typeof type==="number"){pathIndex=type;generics=EMPTY_GENERICS_ARRAY;bindings=EMPTY_BINDINGS_MAP}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths,);if(type.length>BINDINGS_DATA&&type[BINDINGS_DATA].length>0){bindings=new Map(type[BINDINGS_DATA].map(binding=>{const[assocType,constraints]=binding;return[buildItemSearchType(assocType,lowercasePaths,true).id,buildItemSearchTypeAll(constraints,lowercasePaths),]}))}else{bindings=EMPTY_BINDINGS_MAP}}let result;if(pathIndex<0){result={id:pathIndex,ty:TY_GENERIC,path:null,exactPath:null,generics,bindings,}}else if(pathIndex===0){result={id:null,ty:null,path:null,exactPath:null,generics,bindings,}}else{const item=lowercasePaths[pathIndex-1];result={id:buildTypeMapIndex(item.name,isAssocType),ty:item.ty,path:item.path,exactPath:item.exactPath,generics,bindings,}}const cr=TYPES_POOL.get(result.id);if(cr){if(cr.generics.length===result.generics.length&&cr.generics!==result.generics&&cr.generics.every((x,i)=>result.generics[i]===x)){result.generics=cr.generics}if(cr.bindings.size===result.bindings.size&&cr.bindings!==result.bindings){let ok=true;for(const[k,v]of cr.bindings.entries()){const v2=result.bindings.get(v);if(!v2){ok=false;break}if(v!==v2&&v.length===v2.length&&v.every((x,i)=>v2[i]===x)){result.bindings.set(k,v)}else if(v!==v2){ok=false;break}}if(ok){result.bindings=cr.bindings}}if(cr.ty===result.ty&&cr.path===result.path&&cr.bindings===result.bindings&&cr.generics===result.generics&&cr.ty===result.ty){return cr}}TYPES_POOL.set(result.id,result);return result}function buildFunctionSearchTypeCallback(lowercasePaths){return functionSearchType=>{if(functionSearchType===0){return null}const INPUTS_DATA=0;const OUTPUT_DATA=1;let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[buildItemSearchType(functionSearchType[INPUTS_DATA],lowercasePaths)]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths,)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[buildItemSearchType(functionSearchType[OUTPUT_DATA],lowercasePaths)]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths,)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;i{k=(~~k+0x7ed55d16)+(k<<12);k=(k ^ 0xc761c23c)^(k>>>19);k=(~~k+0x165667b1)+(k<<5);k=(~~k+0xd3a2646c)^(k<<9);k=(~~k+0xfd7046c5)+(k<<3);return(k ^ 0xb55a4f09)^(k>>>16)};const hashint2=k=>{k=~k+(k<<15);k ^=k>>>12;k+=k<<2;k ^=k>>>4;k=Math.imul(k,2057);return k ^(k>>16)};if(input!==null){const h0a=hashint1(input);const h0b=hashint2(input);const h1a=~~(h0a+Math.imul(h0b,2));const h1b=~~(h0a+Math.imul(h0b,3));const h2a=~~(h0a+Math.imul(h0b,4));const h2b=~~(h0a+Math.imul(h0b,5));output[0]|=(1<<(h0a%32))|(1<<(h1b%32));output[1]|=(1<<(h1a%32))|(1<<(h2b%32));output[2]|=(1<<(h2a%32))|(1<<(h0b%32));fps.add(input)}for(const g of type.generics){buildFunctionTypeFingerprint(g,output,fps)}const fb={id:null,ty:0,generics:EMPTY_GENERICS_ARRAY,bindings:EMPTY_BINDINGS_MAP,};for(const[k,v]of type.bindings.entries()){fb.id=k;fb.generics=v;buildFunctionTypeFingerprint(fb,output,fps)}output[3]=fps.size}function compareTypeFingerprints(fullId,queryFingerprint){const fh0=functionTypeFingerprint[fullId*4];const fh1=functionTypeFingerprint[(fullId*4)+1];const fh2=functionTypeFingerprint[(fullId*4)+2];const[qh0,qh1,qh2]=queryFingerprint;const[in0,in1,in2]=[fh0&qh0,fh1&qh1,fh2&qh2];if((in0 ^ qh0)||(in1 ^ qh1)||(in2 ^ qh2)){return null}return functionTypeFingerprint[(fullId*4)+3]}class VlqHexDecoder{constructor(string,cons){this.string=string;this.cons=cons;this.offset=0;this.backrefQueue=[]}decodeList(){let c=this.string.charCodeAt(this.offset);const ret=[];while(c!==125){ret.push(this.decode());c=this.string.charCodeAt(this.offset)}this.offset+=1;return ret}decode(){let n=0;let c=this.string.charCodeAt(this.offset);if(c===123){this.offset+=1;return this.decodeList()}while(c<96){n=(n<<4)|(c&0xF);this.offset+=1;c=this.string.charCodeAt(this.offset)}n=(n<<4)|(c&0xF);const[sign,value]=[n&1,n>>1];this.offset+=1;return sign?-value:value}next(){const c=this.string.charCodeAt(this.offset);if(c>=48&&c<64){this.offset+=1;return this.backrefQueue[c-48]}if(c===96){this.offset+=1;return this.cons(0)}const result=this.cons(this.decode());this.backrefQueue.unshift(result);if(this.backrefQueue.length>16){this.backrefQueue.pop()}return result}}class RoaringBitmap{constructor(str){const strdecoded=atob(str);const u8array=new Uint8Array(strdecoded.length);for(let j=0;j=4){offsets=[];for(let j=0;j>3]&(1<<(j&0x7))){const runcount=(u8array[i]|(u8array[i+1]<<8));i+=2;this.containers.push(new RoaringBitmapRun(runcount,u8array.slice(i,i+(runcount*4)),));i+=runcount*4}else if(this.cardinalities[j]>=4096){this.containers.push(new RoaringBitmapBits(u8array.slice(i,i+8192)));i+=8192}else{const end=this.cardinalities[j]*2;this.containers.push(new RoaringBitmapArray(this.cardinalities[j],u8array.slice(i,i+end),));i+=end}}}contains(keyvalue){const key=keyvalue>>16;const value=keyvalue&0xFFFF;for(let i=0;i=start&&value<=(start+lenm1)){return true}}return false}}class RoaringBitmapArray{constructor(cardinality,array){this.cardinality=cardinality;this.array=array}contains(value){const l=this.cardinality*2;for(let i=0;i>3]&(1<<(value&7)))}}function buildIndex(rawSearchIndex){searchIndex=[];searchIndexDeprecated=new Map();searchIndexEmptyDesc=new Map();let currentIndex=0;let id=0;for(const crate of rawSearchIndex.values()){id+=crate.t.length+1}functionTypeFingerprint=new Uint32Array((id+1)*4);id=0;for(const[crate,crateCorpus]of rawSearchIndex){const itemDescShardDecoder=new VlqHexDecoder(crateCorpus.D,noop=>noop);let descShard={crate,shard:0,start:0,len:itemDescShardDecoder.next(),promise:null,resolve:null,};const descShardList=[descShard];searchIndexDeprecated.set(crate,new RoaringBitmap(crateCorpus.c));searchIndexEmptyDesc.set(crate,new RoaringBitmap(crateCorpus.e));let descIndex=0;const crateRow={crate,ty:3,name:crate,path:"",descShard,descIndex,exactPath:"",desc:crateCorpus.doc,parent:undefined,type:null,id,word:crate,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),bitIndex:0,implDisambiguator:null,};id+=1;searchIndex.push(crateRow);currentIndex+=1;if(!searchIndexEmptyDesc.get(crate).contains(0)){descIndex+=1}const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemReexports=new Map(crateCorpus.r);const itemParentIdxs=crateCorpus.i;const implDisambiguator=new Map(crateCorpus.b);const paths=crateCorpus.p;const aliases=crateCorpus.a;const lowercasePaths=[];const itemFunctionDecoder=new VlqHexDecoder(crateCorpus.f,buildFunctionSearchTypeCallback(lowercasePaths),);let len=paths.length;let lastPath=itemPaths.get(0);for(let i=0;i2){path=itemPaths.has(elem[2])?itemPaths.get(elem[2]):lastPath;lastPath=path}const exactPath=elem.length>3?itemPaths.get(elem[3]):path;lowercasePaths.push({ty,name:name.toLowerCase(),path,exactPath});paths[i]={ty,name,path,exactPath}}lastPath="";len=itemTypes.length;for(let i=0;i=descShard.len&&!searchIndexEmptyDesc.get(crate).contains(bitIndex)){descShard={crate,shard:descShard.shard+1,start:descShard.start+descShard.len,len:itemDescShardDecoder.next(),promise:null,resolve:null,};descIndex=0;descShardList.push(descShard)}let word="";if(typeof itemNames[i]==="string"){word=itemNames[i].toLowerCase()}const path=itemPaths.has(i)?itemPaths.get(i):lastPath;const type=itemFunctionDecoder.next();if(type!==null){if(type){const fp=functionTypeFingerprint.subarray(id*4,(id+1)*4);const fps=new Set();for(const t of type.inputs){buildFunctionTypeFingerprint(t,fp,fps)}for(const t of type.output){buildFunctionTypeFingerprint(t,fp,fps)}for(const w of type.where_clause){for(const t of w){buildFunctionTypeFingerprint(t,fp,fps)}}}}const row={crate,ty:itemTypes.charCodeAt(i)-65,name:itemNames[i],path,descShard,descIndex,exactPath:itemReexports.has(i)?itemPaths.get(itemReexports.get(i)):path,parent:itemParentIdxs[i]>0?paths[itemParentIdxs[i]-1]:undefined,type,id,word,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),bitIndex,implDisambiguator:implDisambiguator.has(i)?implDisambiguator.get(i):null,};id+=1;searchIndex.push(row);lastPath=row.path;if(!searchIndexEmptyDesc.get(crate).contains(bitIndex)){descIndex+=1}}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!Object.prototype.hasOwnProperty.call(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=itemTypes.length;searchState.descShards.set(crate,descShardList)}TYPES_POOL=new Map()}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;e.preventDefault();search()}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(true)}buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch(new Map())}})() \ No newline at end of file +
`);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)}}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return[output,array.length]}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}async function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const[ret_others,ret_in_args,ret_returned]=await Promise.all([addTab(results.others,results.query,true),addTab(results.in_args,results.query,false),addTab(results.returned,results.query,false),]);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";if(rawSearchIndex.size>1){crates=" in 
"}let output=`

Results${crates}

`;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

Query parser error: "${error.join("")}".

`;output+="
"+makeTabHeader(0,"In Names",ret_others[1])+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

`}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

"+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

`}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}async function search(forced){const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="\""+query.original+"\" Search - Rust";updateSearchHistory(buildUrl(query.original,filterCrates));await showResults(await execQuery(query,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){return types.length>0?types.map(type=>buildItemSearchType(type,lowercasePaths)):EMPTY_GENERICS_ARRAY}const EMPTY_BINDINGS_MAP=new Map();const EMPTY_GENERICS_ARRAY=[];let TYPES_POOL=new Map();function buildItemSearchType(type,lowercasePaths,isAssocType){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;const BINDINGS_DATA=2;let pathIndex,generics,bindings;if(typeof type==="number"){pathIndex=type;generics=EMPTY_GENERICS_ARRAY;bindings=EMPTY_BINDINGS_MAP}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths,);if(type.length>BINDINGS_DATA&&type[BINDINGS_DATA].length>0){bindings=new Map(type[BINDINGS_DATA].map(binding=>{const[assocType,constraints]=binding;return[buildItemSearchType(assocType,lowercasePaths,true).id,buildItemSearchTypeAll(constraints,lowercasePaths),]}))}else{bindings=EMPTY_BINDINGS_MAP}}let result;if(pathIndex<0){result={id:pathIndex,ty:TY_GENERIC,path:null,exactPath:null,generics,bindings,}}else if(pathIndex===0){result={id:null,ty:null,path:null,exactPath:null,generics,bindings,}}else{const item=lowercasePaths[pathIndex-1];result={id:buildTypeMapIndex(item.name,isAssocType),ty:item.ty,path:item.path,exactPath:item.exactPath,generics,bindings,}}const cr=TYPES_POOL.get(result.id);if(cr){if(cr.generics.length===result.generics.length&&cr.generics!==result.generics&&cr.generics.every((x,i)=>result.generics[i]===x)){result.generics=cr.generics}if(cr.bindings.size===result.bindings.size&&cr.bindings!==result.bindings){let ok=true;for(const[k,v]of cr.bindings.entries()){const v2=result.bindings.get(v);if(!v2){ok=false;break}if(v!==v2&&v.length===v2.length&&v.every((x,i)=>v2[i]===x)){result.bindings.set(k,v)}else if(v!==v2){ok=false;break}}if(ok){result.bindings=cr.bindings}}if(cr.ty===result.ty&&cr.path===result.path&&cr.bindings===result.bindings&&cr.generics===result.generics&&cr.ty===result.ty){return cr}}TYPES_POOL.set(result.id,result);return result}function buildFunctionSearchTypeCallback(lowercasePaths){return functionSearchType=>{if(functionSearchType===0){return null}const INPUTS_DATA=0;const OUTPUT_DATA=1;let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[buildItemSearchType(functionSearchType[INPUTS_DATA],lowercasePaths)]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths,)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[buildItemSearchType(functionSearchType[OUTPUT_DATA],lowercasePaths)]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths,)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;i{k=(~~k+0x7ed55d16)+(k<<12);k=(k ^ 0xc761c23c)^(k>>>19);k=(~~k+0x165667b1)+(k<<5);k=(~~k+0xd3a2646c)^(k<<9);k=(~~k+0xfd7046c5)+(k<<3);return(k ^ 0xb55a4f09)^(k>>>16)};const hashint2=k=>{k=~k+(k<<15);k ^=k>>>12;k+=k<<2;k ^=k>>>4;k=Math.imul(k,2057);return k ^(k>>16)};if(input!==null){const h0a=hashint1(input);const h0b=hashint2(input);const h1a=~~(h0a+Math.imul(h0b,2));const h1b=~~(h0a+Math.imul(h0b,3));const h2a=~~(h0a+Math.imul(h0b,4));const h2b=~~(h0a+Math.imul(h0b,5));output[0]|=(1<<(h0a%32))|(1<<(h1b%32));output[1]|=(1<<(h1a%32))|(1<<(h2b%32));output[2]|=(1<<(h2a%32))|(1<<(h0b%32));fps.add(input)}for(const g of type.generics){buildFunctionTypeFingerprint(g,output,fps)}const fb={id:null,ty:0,generics:EMPTY_GENERICS_ARRAY,bindings:EMPTY_BINDINGS_MAP,};for(const[k,v]of type.bindings.entries()){fb.id=k;fb.generics=v;buildFunctionTypeFingerprint(fb,output,fps)}output[3]=fps.size}function compareTypeFingerprints(fullId,queryFingerprint){const fh0=functionTypeFingerprint[fullId*4];const fh1=functionTypeFingerprint[(fullId*4)+1];const fh2=functionTypeFingerprint[(fullId*4)+2];const[qh0,qh1,qh2]=queryFingerprint;const[in0,in1,in2]=[fh0&qh0,fh1&qh1,fh2&qh2];if((in0 ^ qh0)||(in1 ^ qh1)||(in2 ^ qh2)){return null}return functionTypeFingerprint[(fullId*4)+3]}class VlqHexDecoder{constructor(string,cons){this.string=string;this.cons=cons;this.offset=0;this.backrefQueue=[]}decodeList(){let c=this.string.charCodeAt(this.offset);const ret=[];while(c!==125){ret.push(this.decode());c=this.string.charCodeAt(this.offset)}this.offset+=1;return ret}decode(){let n=0;let c=this.string.charCodeAt(this.offset);if(c===123){this.offset+=1;return this.decodeList()}while(c<96){n=(n<<4)|(c&0xF);this.offset+=1;c=this.string.charCodeAt(this.offset)}n=(n<<4)|(c&0xF);const[sign,value]=[n&1,n>>1];this.offset+=1;return sign?-value:value}next(){const c=this.string.charCodeAt(this.offset);if(c>=48&&c<64){this.offset+=1;return this.backrefQueue[c-48]}if(c===96){this.offset+=1;return this.cons(0)}const result=this.cons(this.decode());this.backrefQueue.unshift(result);if(this.backrefQueue.length>16){this.backrefQueue.pop()}return result}}class RoaringBitmap{constructor(str){const strdecoded=atob(str);const u8array=new Uint8Array(strdecoded.length);for(let j=0;j=4){offsets=[];for(let j=0;j>3]&(1<<(j&0x7))){const runcount=(u8array[i]|(u8array[i+1]<<8));i+=2;this.containers.push(new RoaringBitmapRun(runcount,u8array.slice(i,i+(runcount*4)),));i+=runcount*4}else if(this.cardinalities[j]>=4096){this.containers.push(new RoaringBitmapBits(u8array.slice(i,i+8192)));i+=8192}else{const end=this.cardinalities[j]*2;this.containers.push(new RoaringBitmapArray(this.cardinalities[j],u8array.slice(i,i+end),));i+=end}}}contains(keyvalue){const key=keyvalue>>16;const value=keyvalue&0xFFFF;for(let i=0;i=start&&value<=(start+lenm1)){return true}}return false}}class RoaringBitmapArray{constructor(cardinality,array){this.cardinality=cardinality;this.array=array}contains(value){const l=this.cardinality*2;for(let i=0;i>3]&(1<<(value&7)))}}function buildIndex(rawSearchIndex){searchIndex=[];searchIndexDeprecated=new Map();searchIndexEmptyDesc=new Map();let currentIndex=0;let id=0;for(const crate of rawSearchIndex.values()){id+=crate.t.length+1}functionTypeFingerprint=new Uint32Array((id+1)*4);id=0;for(const[crate,crateCorpus]of rawSearchIndex){const itemDescShardDecoder=new VlqHexDecoder(crateCorpus.D,noop=>noop);let descShard={crate,shard:0,start:0,len:itemDescShardDecoder.next(),promise:null,resolve:null,};const descShardList=[descShard];searchIndexDeprecated.set(crate,new RoaringBitmap(crateCorpus.c));searchIndexEmptyDesc.set(crate,new RoaringBitmap(crateCorpus.e));let descIndex=0;const crateRow={crate,ty:3,name:crate,path:"",descShard,descIndex,exactPath:"",desc:crateCorpus.doc,parent:undefined,type:null,id,word:crate,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),bitIndex:0,implDisambiguator:null,};id+=1;searchIndex.push(crateRow);currentIndex+=1;if(!searchIndexEmptyDesc.get(crate).contains(0)){descIndex+=1}const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemReexports=new Map(crateCorpus.r);const itemParentIdxDecoder=new VlqHexDecoder(crateCorpus.i,noop=>noop);const implDisambiguator=new Map(crateCorpus.b);const paths=crateCorpus.p;const aliases=crateCorpus.a;const lowercasePaths=[];const itemFunctionDecoder=new VlqHexDecoder(crateCorpus.f,buildFunctionSearchTypeCallback(lowercasePaths),);let len=paths.length;let lastPath=itemPaths.get(0);for(let i=0;i2){path=itemPaths.has(elem[2])?itemPaths.get(elem[2]):lastPath;lastPath=path}const exactPath=elem.length>3?itemPaths.get(elem[3]):path;lowercasePaths.push({ty,name:name.toLowerCase(),path,exactPath});paths[i]={ty,name,path,exactPath}}lastPath="";len=itemTypes.length;let lastName="";let lastWord="";for(let i=0;i=descShard.len&&!searchIndexEmptyDesc.get(crate).contains(bitIndex)){descShard={crate,shard:descShard.shard+1,start:descShard.start+descShard.len,len:itemDescShardDecoder.next(),promise:null,resolve:null,};descIndex=0;descShardList.push(descShard)}const name=itemNames[i]===""?lastName:itemNames[i];const word=itemNames[i]===""?lastWord:itemNames[i].toLowerCase();const path=itemPaths.has(i)?itemPaths.get(i):lastPath;const type=itemFunctionDecoder.next();if(type!==null){if(type){const fp=functionTypeFingerprint.subarray(id*4,(id+1)*4);const fps=new Set();for(const t of type.inputs){buildFunctionTypeFingerprint(t,fp,fps)}for(const t of type.output){buildFunctionTypeFingerprint(t,fp,fps)}for(const w of type.where_clause){for(const t of w){buildFunctionTypeFingerprint(t,fp,fps)}}}}const itemParentIdx=itemParentIdxDecoder.next();const row={crate,ty:itemTypes.charCodeAt(i)-65,name,path,descShard,descIndex,exactPath:itemReexports.has(i)?itemPaths.get(itemReexports.get(i)):path,parent:itemParentIdx>0?paths[itemParentIdx-1]:undefined,type,id,word,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),bitIndex,implDisambiguator:implDisambiguator.has(i)?implDisambiguator.get(i):null,};id+=1;searchIndex.push(row);lastPath=row.path;if(!searchIndexEmptyDesc.get(crate).contains(bitIndex)){descIndex+=1}lastName=name;lastWord=word}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!Object.prototype.hasOwnProperty.call(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=itemTypes.length;searchState.descShards.set(crate,descShardList)}TYPES_POOL=new Map()}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;e.preventDefault();search()}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(true)}buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch(new Map())}})() \ No newline at end of file diff --git a/main/trait.impl/core/clone/trait.Clone.js b/main/trait.impl/core/clone/trait.Clone.js index cc6f287..a28a944 100644 --- a/main/trait.impl/core/clone/trait.Clone.js +++ b/main/trait.impl/core/clone/trait.Clone.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Clone for ChangeKind"],["impl Clone for BoneEnd"],["impl Clone for BoneKind"],["impl Clone for Animation"],["impl Clone for Change"],["impl Clone for Frame"],["impl Clone for BoneAxis"],["impl Clone for BoneId"],["impl Clone for JointId"],["impl Clone for Rotation"],["impl Clone for Vector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl Clone for Mode"],["impl Clone for ChangeAggregator"],["impl Clone for EditingSkeleton"],["impl Clone for SkeletalBone"]]],["funnybones",[["impl Clone for ChangeKind"],["impl Clone for SkeletonMutation"],["impl Clone for Target"],["impl Clone for BoneEnd"],["impl Clone for BoneKind"],["impl Clone for Animation"],["impl Clone for Change"],["impl Clone for Frame"],["impl Clone for Angle"],["impl Clone for BoneAxis"],["impl Clone for BoneId"],["impl Clone for Coordinate"],["impl Clone for JointId"],["impl Clone for Vector"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1095,3794]} \ No newline at end of file diff --git a/main/trait.impl/core/cmp/trait.Eq.js b/main/trait.impl/core/cmp/trait.Eq.js index 89f2d36..e15dd3f 100644 --- a/main/trait.impl/core/cmp/trait.Eq.js +++ b/main/trait.impl/core/cmp/trait.Eq.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Eq for BoneEnd"],["impl Eq for BoneAxis"],["impl Eq for BoneId"],["impl Eq for JointId"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl Eq for Mode"]]],["funnybones",[["impl Eq for Target"],["impl Eq for BoneEnd"],["impl Eq for BoneAxis"],["impl Eq for BoneId"],["impl Eq for JointId"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[245,1268]} \ No newline at end of file diff --git a/main/trait.impl/core/cmp/trait.Ord.js b/main/trait.impl/core/cmp/trait.Ord.js index 4008777..e272d5f 100644 --- a/main/trait.impl/core/cmp/trait.Ord.js +++ b/main/trait.impl/core/cmp/trait.Ord.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Ord for BoneId"],["impl Ord for JointId"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Ord for BoneId"],["impl Ord for JointId"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[507]} \ No newline at end of file diff --git a/main/trait.impl/core/cmp/trait.PartialEq.js b/main/trait.impl/core/cmp/trait.PartialEq.js index f345e51..dc25aed 100644 --- a/main/trait.impl/core/cmp/trait.PartialEq.js +++ b/main/trait.impl/core/cmp/trait.PartialEq.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl PartialEq for ChangeKind"],["impl PartialEq for BoneEnd"],["impl PartialEq for BoneKind"],["impl PartialEq for Animation"],["impl PartialEq for Change"],["impl PartialEq for Frame"],["impl PartialEq for BoneAxis"],["impl PartialEq for BoneId"],["impl PartialEq for JointId"],["impl PartialEq for Rotation"],["impl PartialEq for Vector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl PartialEq for Mode"],["impl PartialEq for EditingSkeleton"],["impl PartialEq for SkeletalBone"]]],["funnybones",[["impl PartialEq for ChangeKind"],["impl PartialEq for SkeletonMutation"],["impl PartialEq for Target"],["impl PartialEq for BoneEnd"],["impl PartialEq for BoneKind"],["impl PartialEq for Animation"],["impl PartialEq for Change"],["impl PartialEq for Frame"],["impl PartialEq for Angle"],["impl PartialEq for Bone"],["impl PartialEq for BoneAxis"],["impl PartialEq for BoneId"],["impl PartialEq for Coordinate"],["impl PartialEq for Joint"],["impl PartialEq for JointId"],["impl PartialEq for Skeleton"],["impl PartialEq for Vector"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[835,4689]} \ No newline at end of file diff --git a/main/trait.impl/core/cmp/trait.PartialOrd.js b/main/trait.impl/core/cmp/trait.PartialOrd.js index 37e799c..ca7acd3 100644 --- a/main/trait.impl/core/cmp/trait.PartialOrd.js +++ b/main/trait.impl/core/cmp/trait.PartialOrd.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl PartialOrd for BoneId"],["impl PartialOrd for JointId"],["impl PartialOrd for Rotation"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl PartialOrd for Angle"],["impl PartialOrd for BoneId"],["impl PartialOrd for JointId"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[811]} \ No newline at end of file diff --git a/main/trait.impl/core/convert/trait.From.js b/main/trait.impl/core/convert/trait.From.js index 18ff028..bf4c1b3 100644 --- a/main/trait.impl/core/convert/trait.From.js +++ b/main/trait.impl/core/convert/trait.From.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl From<ChangeKind> for Change"],["impl From<BoneKind> for LabeledBoneKind"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl From<ChangeKind> for Change"],["impl From<BoneKind> for LabeledBoneKind"],["impl From<Coordinate> for Vector"],["impl From<Vector> for Coordinate"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1587]} \ No newline at end of file diff --git a/main/trait.impl/core/default/trait.Default.js b/main/trait.impl/core/default/trait.Default.js index f7d4976..14daf29 100644 --- a/main/trait.impl/core/default/trait.Default.js +++ b/main/trait.impl/core/default/trait.Default.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Default for Animation"],["impl Default for Rotation"],["impl Default for Skeleton"],["impl Default for Vector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl Default for Mode"],["impl Default for EditingSkeleton"],["impl Default for SkeletalBone"]]],["funnybones",[["impl Default for Animation"],["impl Default for Angle"],["impl Default for Coordinate"],["impl Default for Skeleton"],["impl Default for Vector"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[841,1382]} \ No newline at end of file diff --git a/main/trait.impl/core/fmt/trait.Debug.js b/main/trait.impl/core/fmt/trait.Debug.js index 856f5ef..29a034a 100644 --- a/main/trait.impl/core/fmt/trait.Debug.js +++ b/main/trait.impl/core/fmt/trait.Debug.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Debug for ChangeKind"],["impl Debug for BoneEnd"],["impl Debug for BoneKind"],["impl Debug for Animation"],["impl Debug for Change"],["impl Debug for Frame"],["impl Debug for Bone"],["impl Debug for BoneAxis"],["impl Debug for BoneId"],["impl Debug for Joint"],["impl Debug for JointId"],["impl Debug for Rotation"],["impl Debug for Skeleton"],["impl Debug for Vector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl Debug for Mode"],["impl Debug for ChangeAggregator"],["impl Debug for EditingSkeleton"],["impl Debug for SkeletalBone"]]],["funnybones",[["impl Debug for ChangeKind"],["impl Debug for SkeletonMutation"],["impl Debug for Target"],["impl Debug for BoneEnd"],["impl Debug for BoneKind"],["impl Debug for Animation"],["impl Debug for Change"],["impl Debug for Frame"],["impl Debug for SkeletonCanvas"],["impl Debug for Angle"],["impl Debug for Bone"],["impl Debug for BoneAxis"],["impl Debug for BoneId"],["impl Debug for Coordinate"],["impl Debug for Joint"],["impl Debug for JointId"],["impl Debug for Skeleton"],["impl Debug for Vector"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1079,4805]} \ No newline at end of file diff --git a/main/trait.impl/core/fmt/trait.Display.js b/main/trait.impl/core/fmt/trait.Display.js index ea00a97..85e780f 100644 --- a/main/trait.impl/core/fmt/trait.Display.js +++ b/main/trait.impl/core/fmt/trait.Display.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Display for Rotation"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Display for Angle"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[269]} \ No newline at end of file diff --git a/main/trait.impl/core/hash/trait.Hash.js b/main/trait.impl/core/hash/trait.Hash.js index 1730244..7c6069d 100644 --- a/main/trait.impl/core/hash/trait.Hash.js +++ b/main/trait.impl/core/hash/trait.Hash.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Hash for BoneEnd"],["impl Hash for BoneAxis"],["impl Hash for BoneId"],["impl Hash for JointId"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Hash for BoneEnd"],["impl Hash for BoneAxis"],["impl Hash for BoneId"],["impl Hash for JointId"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1018]} \ No newline at end of file diff --git a/main/trait.impl/core/marker/trait.Copy.js b/main/trait.impl/core/marker/trait.Copy.js index d0887a5..1908ac5 100644 --- a/main/trait.impl/core/marker/trait.Copy.js +++ b/main/trait.impl/core/marker/trait.Copy.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Copy for ChangeKind"],["impl Copy for BoneEnd"],["impl Copy for BoneKind"],["impl Copy for Change"],["impl Copy for BoneAxis"],["impl Copy for BoneId"],["impl Copy for JointId"],["impl Copy for Rotation"],["impl Copy for Vector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl Copy for Mode"]]],["funnybones",[["impl Copy for ChangeKind"],["impl Copy for SkeletonMutation"],["impl Copy for Target"],["impl Copy for BoneEnd"],["impl Copy for BoneKind"],["impl Copy for Change"],["impl Copy for Angle"],["impl Copy for BoneAxis"],["impl Copy for BoneId"],["impl Copy for Coordinate"],["impl Copy for JointId"],["impl Copy for Vector"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[257,3226]} \ No newline at end of file diff --git a/main/trait.impl/core/marker/trait.Freeze.js b/main/trait.impl/core/marker/trait.Freeze.js index 96657d2..b64bc67 100644 --- a/main/trait.impl/core/marker/trait.Freeze.js +++ b/main/trait.impl/core/marker/trait.Freeze.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Freeze for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl Freeze for BoneEnd",1,["funnybones::BoneEnd"]],["impl Freeze for BoneKind",1,["funnybones::BoneKind"]],["impl Freeze for Animation",1,["funnybones::animation::Animation"]],["impl Freeze for Change",1,["funnybones::animation::Change"]],["impl Freeze for Frame",1,["funnybones::animation::Frame"]],["impl Freeze for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl Freeze for Bone",1,["funnybones::Bone"]],["impl Freeze for BoneAxis",1,["funnybones::BoneAxis"]],["impl Freeze for BoneId",1,["funnybones::BoneId"]],["impl Freeze for Joint",1,["funnybones::Joint"]],["impl Freeze for JointId",1,["funnybones::JointId"]],["impl Freeze for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl Freeze for Rotation",1,["funnybones::Rotation"]],["impl Freeze for Skeleton",1,["funnybones::Skeleton"]],["impl Freeze for Vector",1,["funnybones::Vector"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl Freeze for Mode",1,["FunnyBones::Mode"]],["impl Freeze for ChangeAggregator",1,["FunnyBones::ChangeAggregator"]],["impl Freeze for EditingSkeleton",1,["FunnyBones::EditingSkeleton"]],["impl Freeze for SkeletalBone",1,["FunnyBones::SkeletalBone"]]]],["funnybones",[["impl Freeze for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl Freeze for SkeletonMutation",1,["funnybones::cushy::skeleton_canvas::SkeletonMutation"]],["impl Freeze for Target",1,["funnybones::cushy::skeleton_canvas::Target"]],["impl Freeze for BoneEnd",1,["funnybones::BoneEnd"]],["impl Freeze for BoneKind",1,["funnybones::BoneKind"]],["impl Freeze for Animation",1,["funnybones::animation::Animation"]],["impl Freeze for Change",1,["funnybones::animation::Change"]],["impl Freeze for Frame",1,["funnybones::animation::Frame"]],["impl Freeze for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl Freeze for SkeletonCanvas",1,["funnybones::cushy::skeleton_canvas::SkeletonCanvas"]],["impl Freeze for Angle",1,["funnybones::Angle"]],["impl Freeze for Bone",1,["funnybones::Bone"]],["impl Freeze for BoneAxis",1,["funnybones::BoneAxis"]],["impl Freeze for BoneId",1,["funnybones::BoneId"]],["impl Freeze for Coordinate",1,["funnybones::Coordinate"]],["impl Freeze for Joint",1,["funnybones::Joint"]],["impl Freeze for JointId",1,["funnybones::JointId"]],["impl Freeze for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl Freeze for Skeleton",1,["funnybones::Skeleton"]],["impl Freeze for Vector",1,["funnybones::Vector"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1238,6241]} \ No newline at end of file diff --git a/main/trait.impl/core/marker/trait.Send.js b/main/trait.impl/core/marker/trait.Send.js index cfde7ad..6b9fbb6 100644 --- a/main/trait.impl/core/marker/trait.Send.js +++ b/main/trait.impl/core/marker/trait.Send.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Send for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl Send for BoneEnd",1,["funnybones::BoneEnd"]],["impl Send for BoneKind",1,["funnybones::BoneKind"]],["impl Send for Animation",1,["funnybones::animation::Animation"]],["impl Send for Change",1,["funnybones::animation::Change"]],["impl Send for Frame",1,["funnybones::animation::Frame"]],["impl Send for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl Send for Bone",1,["funnybones::Bone"]],["impl Send for BoneAxis",1,["funnybones::BoneAxis"]],["impl Send for BoneId",1,["funnybones::BoneId"]],["impl Send for Joint",1,["funnybones::Joint"]],["impl Send for JointId",1,["funnybones::JointId"]],["impl Send for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl Send for Rotation",1,["funnybones::Rotation"]],["impl Send for Skeleton",1,["funnybones::Skeleton"]],["impl Send for Vector",1,["funnybones::Vector"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl Send for Mode",1,["FunnyBones::Mode"]],["impl Send for ChangeAggregator",1,["FunnyBones::ChangeAggregator"]],["impl Send for EditingSkeleton",1,["FunnyBones::EditingSkeleton"]],["impl Send for SkeletalBone",1,["FunnyBones::SkeletalBone"]]]],["funnybones",[["impl Send for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl Send for SkeletonMutation",1,["funnybones::cushy::skeleton_canvas::SkeletonMutation"]],["impl Send for Target",1,["funnybones::cushy::skeleton_canvas::Target"]],["impl Send for BoneEnd",1,["funnybones::BoneEnd"]],["impl Send for BoneKind",1,["funnybones::BoneKind"]],["impl Send for Animation",1,["funnybones::animation::Animation"]],["impl Send for Change",1,["funnybones::animation::Change"]],["impl Send for Frame",1,["funnybones::animation::Frame"]],["impl Send for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl Send for SkeletonCanvas",1,["funnybones::cushy::skeleton_canvas::SkeletonCanvas"]],["impl Send for Angle",1,["funnybones::Angle"]],["impl Send for Bone",1,["funnybones::Bone"]],["impl Send for BoneAxis",1,["funnybones::BoneAxis"]],["impl Send for BoneId",1,["funnybones::BoneId"]],["impl Send for Coordinate",1,["funnybones::Coordinate"]],["impl Send for Joint",1,["funnybones::Joint"]],["impl Send for JointId",1,["funnybones::JointId"]],["impl Send for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl Send for Skeleton",1,["funnybones::Skeleton"]],["impl Send for Vector",1,["funnybones::Vector"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1214,6121]} \ No newline at end of file diff --git a/main/trait.impl/core/marker/trait.StructuralPartialEq.js b/main/trait.impl/core/marker/trait.StructuralPartialEq.js index efe323e..99978a1 100644 --- a/main/trait.impl/core/marker/trait.StructuralPartialEq.js +++ b/main/trait.impl/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl StructuralPartialEq for ChangeKind"],["impl StructuralPartialEq for BoneEnd"],["impl StructuralPartialEq for BoneKind"],["impl StructuralPartialEq for Animation"],["impl StructuralPartialEq for Change"],["impl StructuralPartialEq for Frame"],["impl StructuralPartialEq for BoneAxis"],["impl StructuralPartialEq for BoneId"],["impl StructuralPartialEq for JointId"],["impl StructuralPartialEq for Rotation"],["impl StructuralPartialEq for Vector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl StructuralPartialEq for Mode"],["impl StructuralPartialEq for EditingSkeleton"],["impl StructuralPartialEq for SkeletalBone"]]],["funnybones",[["impl StructuralPartialEq for ChangeKind"],["impl StructuralPartialEq for SkeletonMutation"],["impl StructuralPartialEq for Target"],["impl StructuralPartialEq for BoneEnd"],["impl StructuralPartialEq for BoneKind"],["impl StructuralPartialEq for Animation"],["impl StructuralPartialEq for Change"],["impl StructuralPartialEq for Frame"],["impl StructuralPartialEq for Angle"],["impl StructuralPartialEq for Bone"],["impl StructuralPartialEq for BoneAxis"],["impl StructuralPartialEq for BoneId"],["impl StructuralPartialEq for Coordinate"],["impl StructuralPartialEq for Joint"],["impl StructuralPartialEq for JointId"],["impl StructuralPartialEq for Skeleton"],["impl StructuralPartialEq for Vector"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[943,5301]} \ No newline at end of file diff --git a/main/trait.impl/core/marker/trait.Sync.js b/main/trait.impl/core/marker/trait.Sync.js index 58f37d8..123ebb6 100644 --- a/main/trait.impl/core/marker/trait.Sync.js +++ b/main/trait.impl/core/marker/trait.Sync.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Sync for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl Sync for BoneEnd",1,["funnybones::BoneEnd"]],["impl Sync for BoneKind",1,["funnybones::BoneKind"]],["impl Sync for Animation",1,["funnybones::animation::Animation"]],["impl Sync for Change",1,["funnybones::animation::Change"]],["impl Sync for Frame",1,["funnybones::animation::Frame"]],["impl Sync for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl Sync for Bone",1,["funnybones::Bone"]],["impl Sync for BoneAxis",1,["funnybones::BoneAxis"]],["impl Sync for BoneId",1,["funnybones::BoneId"]],["impl Sync for Joint",1,["funnybones::Joint"]],["impl Sync for JointId",1,["funnybones::JointId"]],["impl Sync for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl Sync for Rotation",1,["funnybones::Rotation"]],["impl Sync for Skeleton",1,["funnybones::Skeleton"]],["impl Sync for Vector",1,["funnybones::Vector"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl Sync for Mode",1,["FunnyBones::Mode"]],["impl Sync for ChangeAggregator",1,["FunnyBones::ChangeAggregator"]],["impl Sync for EditingSkeleton",1,["FunnyBones::EditingSkeleton"]],["impl Sync for SkeletalBone",1,["FunnyBones::SkeletalBone"]]]],["funnybones",[["impl !Sync for SkeletonCanvas",1,["funnybones::cushy::skeleton_canvas::SkeletonCanvas"]],["impl Sync for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl Sync for SkeletonMutation",1,["funnybones::cushy::skeleton_canvas::SkeletonMutation"]],["impl Sync for Target",1,["funnybones::cushy::skeleton_canvas::Target"]],["impl Sync for BoneEnd",1,["funnybones::BoneEnd"]],["impl Sync for BoneKind",1,["funnybones::BoneKind"]],["impl Sync for Animation",1,["funnybones::animation::Animation"]],["impl Sync for Change",1,["funnybones::animation::Change"]],["impl Sync for Frame",1,["funnybones::animation::Frame"]],["impl Sync for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl Sync for Angle",1,["funnybones::Angle"]],["impl Sync for Bone",1,["funnybones::Bone"]],["impl Sync for BoneAxis",1,["funnybones::BoneAxis"]],["impl Sync for BoneId",1,["funnybones::BoneId"]],["impl Sync for Coordinate",1,["funnybones::Coordinate"]],["impl Sync for Joint",1,["funnybones::Joint"]],["impl Sync for JointId",1,["funnybones::JointId"]],["impl Sync for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl Sync for Skeleton",1,["funnybones::Skeleton"]],["impl Sync for Vector",1,["funnybones::Vector"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1214,6122]} \ No newline at end of file diff --git a/main/trait.impl/core/marker/trait.Unpin.js b/main/trait.impl/core/marker/trait.Unpin.js index 902fced..c084dba 100644 --- a/main/trait.impl/core/marker/trait.Unpin.js +++ b/main/trait.impl/core/marker/trait.Unpin.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Unpin for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl Unpin for BoneEnd",1,["funnybones::BoneEnd"]],["impl Unpin for BoneKind",1,["funnybones::BoneKind"]],["impl Unpin for Animation",1,["funnybones::animation::Animation"]],["impl Unpin for Change",1,["funnybones::animation::Change"]],["impl Unpin for Frame",1,["funnybones::animation::Frame"]],["impl Unpin for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl Unpin for Bone",1,["funnybones::Bone"]],["impl Unpin for BoneAxis",1,["funnybones::BoneAxis"]],["impl Unpin for BoneId",1,["funnybones::BoneId"]],["impl Unpin for Joint",1,["funnybones::Joint"]],["impl Unpin for JointId",1,["funnybones::JointId"]],["impl Unpin for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl Unpin for Rotation",1,["funnybones::Rotation"]],["impl Unpin for Skeleton",1,["funnybones::Skeleton"]],["impl Unpin for Vector",1,["funnybones::Vector"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl Unpin for Mode",1,["FunnyBones::Mode"]],["impl Unpin for ChangeAggregator",1,["FunnyBones::ChangeAggregator"]],["impl Unpin for EditingSkeleton",1,["FunnyBones::EditingSkeleton"]],["impl Unpin for SkeletalBone",1,["FunnyBones::SkeletalBone"]]]],["funnybones",[["impl Unpin for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl Unpin for SkeletonMutation",1,["funnybones::cushy::skeleton_canvas::SkeletonMutation"]],["impl Unpin for Target",1,["funnybones::cushy::skeleton_canvas::Target"]],["impl Unpin for BoneEnd",1,["funnybones::BoneEnd"]],["impl Unpin for BoneKind",1,["funnybones::BoneKind"]],["impl Unpin for Animation",1,["funnybones::animation::Animation"]],["impl Unpin for Change",1,["funnybones::animation::Change"]],["impl Unpin for Frame",1,["funnybones::animation::Frame"]],["impl Unpin for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl Unpin for SkeletonCanvas",1,["funnybones::cushy::skeleton_canvas::SkeletonCanvas"]],["impl Unpin for Angle",1,["funnybones::Angle"]],["impl Unpin for Bone",1,["funnybones::Bone"]],["impl Unpin for BoneAxis",1,["funnybones::BoneAxis"]],["impl Unpin for BoneId",1,["funnybones::BoneId"]],["impl Unpin for Coordinate",1,["funnybones::Coordinate"]],["impl Unpin for Joint",1,["funnybones::Joint"]],["impl Unpin for JointId",1,["funnybones::JointId"]],["impl Unpin for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl Unpin for Skeleton",1,["funnybones::Skeleton"]],["impl Unpin for Vector",1,["funnybones::Vector"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1226,6181]} \ No newline at end of file diff --git a/main/trait.impl/core/ops/arith/trait.Add.js b/main/trait.impl/core/ops/arith/trait.Add.js index 4d20719..2cb8143 100644 --- a/main/trait.impl/core/ops/arith/trait.Add.js +++ b/main/trait.impl/core/ops/arith/trait.Add.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Add for Rotation"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Add for Angle"],["impl Add for Coordinate"],["impl Add<Angle> for Vector"],["impl Add<Vector> for Coordinate"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1288]} \ No newline at end of file diff --git a/main/trait.impl/core/ops/arith/trait.AddAssign.js b/main/trait.impl/core/ops/arith/trait.AddAssign.js new file mode 100644 index 0000000..e167583 --- /dev/null +++ b/main/trait.impl/core/ops/arith/trait.AddAssign.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl AddAssign for Angle"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[288]} \ No newline at end of file diff --git a/main/trait.impl/core/ops/arith/trait.Div.js b/main/trait.impl/core/ops/arith/trait.Div.js new file mode 100644 index 0000000..4c58cbd --- /dev/null +++ b/main/trait.impl/core/ops/arith/trait.Div.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Div<f32> for Coordinate"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[389]} \ No newline at end of file diff --git a/main/trait.impl/core/ops/arith/trait.Mul.js b/main/trait.impl/core/ops/arith/trait.Mul.js new file mode 100644 index 0000000..81a219d --- /dev/null +++ b/main/trait.impl/core/ops/arith/trait.Mul.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Mul<f32> for Coordinate"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[389]} \ No newline at end of file diff --git a/main/trait.impl/core/ops/arith/trait.Neg.js b/main/trait.impl/core/ops/arith/trait.Neg.js index deea8ff..3d1b86b 100644 --- a/main/trait.impl/core/ops/arith/trait.Neg.js +++ b/main/trait.impl/core/ops/arith/trait.Neg.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Neg for Rotation"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Neg for Angle"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[270]} \ No newline at end of file diff --git a/main/trait.impl/core/ops/arith/trait.Sub.js b/main/trait.impl/core/ops/arith/trait.Sub.js index c509491..d06eaf5 100644 --- a/main/trait.impl/core/ops/arith/trait.Sub.js +++ b/main/trait.impl/core/ops/arith/trait.Sub.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Sub for Rotation"],["impl Sub for Vector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Sub for Angle"],["impl Sub for Coordinate"],["impl Sub<Angle> for Vector"],["impl Sub<Vector> for Coordinate"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1288]} \ No newline at end of file diff --git a/main/trait.impl/core/ops/arith/trait.SubAssign.js b/main/trait.impl/core/ops/arith/trait.SubAssign.js new file mode 100644 index 0000000..2dcba96 --- /dev/null +++ b/main/trait.impl/core/ops/arith/trait.SubAssign.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl SubAssign for Angle"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[288]} \ No newline at end of file diff --git a/main/trait.impl/core/ops/deref/trait.Deref.js b/main/trait.impl/core/ops/deref/trait.Deref.js index f45facd..26d3218 100644 --- a/main/trait.impl/core/ops/deref/trait.Deref.js +++ b/main/trait.impl/core/ops/deref/trait.Deref.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Deref for Animation"],["impl Deref for Frame"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Deref for Animation"],["impl Deref for Frame"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[590]} \ No newline at end of file diff --git a/main/trait.impl/core/ops/deref/trait.DerefMut.js b/main/trait.impl/core/ops/deref/trait.DerefMut.js index 1142645..883765c 100644 --- a/main/trait.impl/core/ops/deref/trait.DerefMut.js +++ b/main/trait.impl/core/ops/deref/trait.DerefMut.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl DerefMut for Animation"],["impl DerefMut for Frame"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl DerefMut for Animation"],["impl DerefMut for Frame"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[608]} \ No newline at end of file diff --git a/main/trait.impl/core/ops/index/trait.Index.js b/main/trait.impl/core/ops/index/trait.Index.js index c261b41..a0c2b59 100644 --- a/main/trait.impl/core/ops/index/trait.Index.js +++ b/main/trait.impl/core/ops/index/trait.Index.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Index<BoneId> for Skeleton"],["impl Index<JointId> for Skeleton"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Index<BoneId> for Skeleton"],["impl Index<JointId> for Skeleton"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[783]} \ No newline at end of file diff --git a/main/trait.impl/core/ops/index/trait.IndexMut.js b/main/trait.impl/core/ops/index/trait.IndexMut.js index 86719e0..0554ca7 100644 --- a/main/trait.impl/core/ops/index/trait.IndexMut.js +++ b/main/trait.impl/core/ops/index/trait.IndexMut.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl IndexMut<BoneId> for Skeleton"],["impl IndexMut<JointId> for Skeleton"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl IndexMut<BoneId> for Skeleton"],["impl IndexMut<JointId> for Skeleton"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[801]} \ No newline at end of file diff --git a/main/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/main/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js index 4764451..6601ae0 100644 --- a/main/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/main/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl RefUnwindSafe for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl RefUnwindSafe for BoneEnd",1,["funnybones::BoneEnd"]],["impl RefUnwindSafe for BoneKind",1,["funnybones::BoneKind"]],["impl RefUnwindSafe for Animation",1,["funnybones::animation::Animation"]],["impl RefUnwindSafe for Change",1,["funnybones::animation::Change"]],["impl RefUnwindSafe for Frame",1,["funnybones::animation::Frame"]],["impl RefUnwindSafe for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl RefUnwindSafe for Bone",1,["funnybones::Bone"]],["impl RefUnwindSafe for BoneAxis",1,["funnybones::BoneAxis"]],["impl RefUnwindSafe for BoneId",1,["funnybones::BoneId"]],["impl RefUnwindSafe for Joint",1,["funnybones::Joint"]],["impl RefUnwindSafe for JointId",1,["funnybones::JointId"]],["impl RefUnwindSafe for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl RefUnwindSafe for Rotation",1,["funnybones::Rotation"]],["impl RefUnwindSafe for Skeleton",1,["funnybones::Skeleton"]],["impl RefUnwindSafe for Vector",1,["funnybones::Vector"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl !RefUnwindSafe for ChangeAggregator",1,["FunnyBones::ChangeAggregator"]],["impl !RefUnwindSafe for EditingSkeleton",1,["FunnyBones::EditingSkeleton"]],["impl !RefUnwindSafe for SkeletalBone",1,["FunnyBones::SkeletalBone"]],["impl RefUnwindSafe for Mode",1,["FunnyBones::Mode"]]]],["funnybones",[["impl !RefUnwindSafe for SkeletonCanvas",1,["funnybones::cushy::skeleton_canvas::SkeletonCanvas"]],["impl RefUnwindSafe for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl RefUnwindSafe for SkeletonMutation",1,["funnybones::cushy::skeleton_canvas::SkeletonMutation"]],["impl RefUnwindSafe for Target",1,["funnybones::cushy::skeleton_canvas::Target"]],["impl RefUnwindSafe for BoneEnd",1,["funnybones::BoneEnd"]],["impl RefUnwindSafe for BoneKind",1,["funnybones::BoneKind"]],["impl RefUnwindSafe for Animation",1,["funnybones::animation::Animation"]],["impl RefUnwindSafe for Change",1,["funnybones::animation::Change"]],["impl RefUnwindSafe for Frame",1,["funnybones::animation::Frame"]],["impl RefUnwindSafe for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl RefUnwindSafe for Angle",1,["funnybones::Angle"]],["impl RefUnwindSafe for Bone",1,["funnybones::Bone"]],["impl RefUnwindSafe for BoneAxis",1,["funnybones::BoneAxis"]],["impl RefUnwindSafe for BoneId",1,["funnybones::BoneId"]],["impl RefUnwindSafe for Coordinate",1,["funnybones::Coordinate"]],["impl RefUnwindSafe for Joint",1,["funnybones::Joint"]],["impl RefUnwindSafe for JointId",1,["funnybones::JointId"]],["impl RefUnwindSafe for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl RefUnwindSafe for Skeleton",1,["funnybones::Skeleton"]],["impl RefUnwindSafe for Vector",1,["funnybones::Vector"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1417,7122]} \ No newline at end of file diff --git a/main/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/main/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js index 63fde79..20406f6 100644 --- a/main/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/main/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl UnwindSafe for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl UnwindSafe for BoneEnd",1,["funnybones::BoneEnd"]],["impl UnwindSafe for BoneKind",1,["funnybones::BoneKind"]],["impl UnwindSafe for Animation",1,["funnybones::animation::Animation"]],["impl UnwindSafe for Change",1,["funnybones::animation::Change"]],["impl UnwindSafe for Frame",1,["funnybones::animation::Frame"]],["impl UnwindSafe for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl UnwindSafe for Bone",1,["funnybones::Bone"]],["impl UnwindSafe for BoneAxis",1,["funnybones::BoneAxis"]],["impl UnwindSafe for BoneId",1,["funnybones::BoneId"]],["impl UnwindSafe for Joint",1,["funnybones::Joint"]],["impl UnwindSafe for JointId",1,["funnybones::JointId"]],["impl UnwindSafe for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl UnwindSafe for Rotation",1,["funnybones::Rotation"]],["impl UnwindSafe for Skeleton",1,["funnybones::Skeleton"]],["impl UnwindSafe for Vector",1,["funnybones::Vector"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["FunnyBones",[["impl !UnwindSafe for ChangeAggregator",1,["FunnyBones::ChangeAggregator"]],["impl !UnwindSafe for EditingSkeleton",1,["FunnyBones::EditingSkeleton"]],["impl !UnwindSafe for SkeletalBone",1,["FunnyBones::SkeletalBone"]],["impl UnwindSafe for Mode",1,["FunnyBones::Mode"]]]],["funnybones",[["impl !UnwindSafe for SkeletonCanvas",1,["funnybones::cushy::skeleton_canvas::SkeletonCanvas"]],["impl UnwindSafe for ChangeKind",1,["funnybones::animation::ChangeKind"]],["impl UnwindSafe for SkeletonMutation",1,["funnybones::cushy::skeleton_canvas::SkeletonMutation"]],["impl UnwindSafe for Target",1,["funnybones::cushy::skeleton_canvas::Target"]],["impl UnwindSafe for BoneEnd",1,["funnybones::BoneEnd"]],["impl UnwindSafe for BoneKind",1,["funnybones::BoneKind"]],["impl UnwindSafe for Animation",1,["funnybones::animation::Animation"]],["impl UnwindSafe for Change",1,["funnybones::animation::Change"]],["impl UnwindSafe for Frame",1,["funnybones::animation::Frame"]],["impl UnwindSafe for RunningAnimation",1,["funnybones::animation::RunningAnimation"]],["impl UnwindSafe for Angle",1,["funnybones::Angle"]],["impl UnwindSafe for Bone",1,["funnybones::Bone"]],["impl UnwindSafe for BoneAxis",1,["funnybones::BoneAxis"]],["impl UnwindSafe for BoneId",1,["funnybones::BoneId"]],["impl UnwindSafe for Coordinate",1,["funnybones::Coordinate"]],["impl UnwindSafe for Joint",1,["funnybones::Joint"]],["impl UnwindSafe for JointId",1,["funnybones::JointId"]],["impl UnwindSafe for LabeledBoneKind",1,["funnybones::LabeledBoneKind"]],["impl UnwindSafe for Skeleton",1,["funnybones::Skeleton"]],["impl UnwindSafe for Vector",1,["funnybones::Vector"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1381,6942]} \ No newline at end of file diff --git a/main/trait.impl/cushy/animation/trait.LinearInterpolate.js b/main/trait.impl/cushy/animation/trait.LinearInterpolate.js index 9e72f2f..8d2f77c 100644 --- a/main/trait.impl/cushy/animation/trait.LinearInterpolate.js +++ b/main/trait.impl/cushy/animation/trait.LinearInterpolate.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl LinearInterpolate for Rotation"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl LinearInterpolate for Angle"],["impl LinearInterpolate for Vector"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[287]} \ No newline at end of file diff --git a/main/trait.impl/cushy/animation/trait.PercentBetween.js b/main/trait.impl/cushy/animation/trait.PercentBetween.js index b07bdea..d3dbed9 100644 --- a/main/trait.impl/cushy/animation/trait.PercentBetween.js +++ b/main/trait.impl/cushy/animation/trait.PercentBetween.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl PercentBetween for Rotation"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl PercentBetween for Angle"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[147]} \ No newline at end of file diff --git a/main/trait.impl/cushy/widget/trait.Widget.js b/main/trait.impl/cushy/widget/trait.Widget.js new file mode 100644 index 0000000..11204b9 --- /dev/null +++ b/main/trait.impl/cushy/widget/trait.Widget.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Widget for SkeletonCanvas"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[212]} \ No newline at end of file diff --git a/main/trait.impl/figures/traits/trait.FromComponents.js b/main/trait.impl/figures/traits/trait.FromComponents.js index 39032f8..e6b7856 100644 --- a/main/trait.impl/figures/traits/trait.FromComponents.js +++ b/main/trait.impl/figures/traits/trait.FromComponents.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl FromComponents<f32> for Vector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl FromComponents<f32> for Coordinate"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[266]} \ No newline at end of file diff --git a/main/trait.impl/figures/traits/trait.IntoComponents.js b/main/trait.impl/figures/traits/trait.IntoComponents.js index fb6f976..6e14612 100644 --- a/main/trait.impl/figures/traits/trait.IntoComponents.js +++ b/main/trait.impl/figures/traits/trait.IntoComponents.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl IntoComponents<f32> for Vector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl IntoComponents<f32> for Coordinate"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[266]} \ No newline at end of file diff --git a/main/trait.impl/figures/traits/trait.Ranged.js b/main/trait.impl/figures/traits/trait.Ranged.js new file mode 100644 index 0000000..fde15d7 --- /dev/null +++ b/main/trait.impl/figures/traits/trait.Ranged.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Ranged for Angle"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[139]} \ No newline at end of file diff --git a/main/trait.impl/serde/de/trait.Deserialize.js b/main/trait.impl/serde/de/trait.Deserialize.js index 391c42f..f6b303c 100644 --- a/main/trait.impl/serde/de/trait.Deserialize.js +++ b/main/trait.impl/serde/de/trait.Deserialize.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl<'de> Deserialize<'de> for ChangeKind"],["impl<'de> Deserialize<'de> for BoneEnd"],["impl<'de> Deserialize<'de> for BoneKind"],["impl<'de> Deserialize<'de> for Change"],["impl<'de> Deserialize<'de> for Frame"],["impl<'de> Deserialize<'de> for BoneAxis"],["impl<'de> Deserialize<'de> for BoneId"],["impl<'de> Deserialize<'de> for JointId"],["impl<'de> Deserialize<'de> for Rotation"],["impl<'de> Deserialize<'de> for Skeleton"],["impl<'de> Deserialize<'de> for Vector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl<'de> Deserialize<'de> for ChangeKind"],["impl<'de> Deserialize<'de> for BoneEnd"],["impl<'de> Deserialize<'de> for BoneKind"],["impl<'de> Deserialize<'de> for Change"],["impl<'de> Deserialize<'de> for Frame"],["impl<'de> Deserialize<'de> for Angle"],["impl<'de> Deserialize<'de> for BoneAxis"],["impl<'de> Deserialize<'de> for BoneId"],["impl<'de> Deserialize<'de> for Coordinate"],["impl<'de> Deserialize<'de> for JointId"],["impl<'de> Deserialize<'de> for Skeleton"],["impl<'de> Deserialize<'de> for Vector"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[3535]} \ No newline at end of file diff --git a/main/trait.impl/serde/ser/trait.Serialize.js b/main/trait.impl/serde/ser/trait.Serialize.js index 59c8c5d..4d14891 100644 --- a/main/trait.impl/serde/ser/trait.Serialize.js +++ b/main/trait.impl/serde/ser/trait.Serialize.js @@ -1,3 +1,9 @@ -(function() {var implementors = { -"funnybones":[["impl Serialize for ChangeKind"],["impl Serialize for BoneEnd"],["impl Serialize for BoneKind"],["impl Serialize for Change"],["impl Serialize for Frame"],["impl Serialize for Bone"],["impl Serialize for BoneAxis"],["impl Serialize for BoneId"],["impl Serialize for Joint"],["impl Serialize for JointId"],["impl Serialize for Rotation"],["impl Serialize for Skeleton"],["impl Serialize for Vector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() { + var implementors = Object.fromEntries([["funnybones",[["impl Serialize for ChangeKind"],["impl Serialize for BoneEnd"],["impl Serialize for BoneKind"],["impl Serialize for Change"],["impl Serialize for Frame"],["impl Serialize for Angle"],["impl Serialize for Bone"],["impl Serialize for BoneAxis"],["impl Serialize for BoneId"],["impl Serialize for Coordinate"],["impl Serialize for Joint"],["impl Serialize for JointId"],["impl Serialize for Skeleton"],["impl Serialize for Vector"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[3734]} \ No newline at end of file