Skip to main content

Robot

Struct Robot 

Source
pub struct Robot { /* private fields */ }
Expand description

Fully normalized runtime-facing robot model.

This is the whole of what manifest.json carries: the robot’s identity and structure, the motion it may make, the services it runs, and the components it mounts together with the types behind them. Everything a launched participant needs to know about the robot - including its own configuration - is read from here, so there is no second persisted document to agree with.

Implementations§

Source§

impl Robot

Source

pub const fn id(&self) -> &RobotId

Source

pub const fn motion(&self) -> &MotionModel

Source

pub fn services(&self) -> impl ExactSizeIterator<Item = (&ServiceId, &Service)>

Every service this robot runs, ordered by service id.

Source

pub fn service(&self, id: &str) -> Option<&Service>

The named service, if this robot runs one.

Source

pub fn service_config(&self, id: &str) -> Option<&Value>

The configuration the named service is launched with.

None covers both “this robot does not run that service” and “it runs with no configuration”, which is the same answer to the one question a service asks about itself at startup.

Source

pub fn components(&self) -> impl Iterator<Item = ComponentView<'_>>

Every mounted component, ordered by instance id.

Source

pub fn component_ids( &self, ) -> impl ExactSizeIterator<Item = &ComponentInstanceId>

Every mounted instance’s identity, ordered.

Source

pub fn component(&self, id: &str) -> Option<ComponentView<'_>>

The named component: its instance, its type, and its simulation.

Source

pub fn component_types( &self, ) -> impl ExactSizeIterator<Item = (&ComponentTypeId, &Component)>

Every declared component type, ordered by type id.

Source

pub const fn structure(&self) -> &Structure

The robot’s own structure, in flattened runtime identities.

Source

pub const fn footprint_envelope(&self) -> Option<FootprintEnvelope>

The persisted compiler-derived stock-safety envelope, if available.

Source

pub fn capability(&self, reference: &CapabilityRef) -> Option<&Capability>

The referenced capability, if the robot declares it.

Source

pub fn capability_refs( &self, selects: impl Fn(&Capability) -> bool, ) -> Vec<CapabilityRef>

Every declared capability matching selects.

The result is ordered by (component id, capability id). That order is an invariant, not an accident of iteration: participants derive bus identities and arbitration priorities from these positions, so two runs over the same robot must produce the same sequence.

This is infallible because a Robot value cannot exist with an instance whose component type is absent: validation rejects that with ModelError::UnknownComponentType before the value is constructed. The unresolved arm below is therefore unreachable rather than a capability being quietly dropped, and it stays a skip rather than a panic so that the impossible case degrades into a smaller result set instead of taking the process down.

Source

pub fn capabilities_with_role(&self, role: CapabilityRole) -> Vec<CapabilityRef>

Every capability assigned the given authored role, ordered by (component id, capability id).

Source

pub fn require_motor( &self, reference: &CapabilityRef, ) -> Result<(&Motor, i8), ModelError>

The referenced motor and the direction sign to apply to it.

§Errors

Returns ModelError::UnknownCapability when the robot does not declare the capability, and ModelError::CapabilityKindMismatch when it declares something other than a motor.

Source

pub fn require_encoder( &self, reference: &CapabilityRef, ) -> Result<(&Encoder, i8), ModelError>

The referenced encoder and the direction sign to apply to it.

§Errors

Returns ModelError::UnknownCapability when the robot does not declare the capability, and ModelError::CapabilityKindMismatch when it declares something other than an encoder.

The namespaced runtime frame for a capability’s component-local link.

§Errors

Returns ModelError::CapabilityTargetKind when the capability is attached to a joint rather than a link, and ModelError::UnknownBoundTarget when its component type has no such link.

Trait Implementations§

Source§

impl Clone for Robot

Source§

fn clone(&self) -> Robot

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

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Robot

Source§

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

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

impl<'de> Deserialize<'de> for Robot

Source§

fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>

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

impl Serialize for Robot

Source§

fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Robot

§

impl RefUnwindSafe for Robot

§

impl Send for Robot

§

impl Sync for Robot

§

impl Unpin for Robot

§

impl UnsafeUnpin for Robot

§

impl UnwindSafe for Robot

Blanket Implementations§

Source§

impl<Source> AccessAs for Source

Source§

fn ref_as<T>(&self) -> <Source as IGuardRef<T>>::Guard<'_>
where Source: IGuardRef<T>, T: ?Sized,

Provides immutable access to a type as if it were its ABI-unstable equivalent.
Source§

fn mut_as<T>(&mut self) -> <Source as IGuardMut<T>>::GuardMut<'_>
where Source: IGuardMut<T>, T: ?Sized,

Provides mutable access to a type as if it were its ABI-unstable equivalent.
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> AsNode<T> for T

Source§

fn as_node(&self) -> &T

Source§

impl<T> AsNodeMut<T> for T

Source§

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

Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

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

Source§

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

Source§

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

Source§

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

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

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

Source§

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, As> IGuardMut<As> for T
where T: Into<As>, As: Into<T>,

Source§

type GuardMut<'a> = MutAs<'a, T, As> where T: 'a

The type of the guard which will clean up the temporary after applying its changes to the original.
Source§

fn guard_mut_inner(&mut self) -> <T as IGuardMut<As>>::GuardMut<'_>

Construct the temporary and guard it through a mutable reference.
Source§

impl<T, As> IGuardRef<As> for T
where T: Into<As>, As: Into<T>,

Source§

type Guard<'a> = RefAs<'a, T, As> where T: 'a

The type of the guard which will clean up the temporary.
Source§

fn guard_ref_inner(&self) -> <T as IGuardRef<As>>::Guard<'_>

Construct the temporary and guard it through an immutable reference.
Source§

impl<T> Includes<End> for T

Source§

type Output = End

The result
Source§

impl<T> Instrument for T

Source§

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

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

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

impl<T> Payload for T
where T: Serialize + DeserializeOwned + Send + Sync + 'static,

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

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

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

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

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

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

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

Source§

type Error = 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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