[−][src]Struct screeps::ObjectId
Represents an Object ID and a type that the ID points to.
Each object id in screeps is represented by a Mongo GUID, which, while not guaranteed, is unlikely to change. This takes advantage of that by storing a packed representation of 12 bytes.
This object ID is typed, but not strictly. It's completely safe to create an ObjectId with an incorrect type, and all operations which use the type will double-check at runtime.
With that said, using this can provide nice type inference, and should have
few disadvantages to the lower-level alternative, RawObjectId
.
Conversion
Use into
to convert between ObjectId<T>
and RawObjectId
, and
ObjectId::into_type
to change the type this ObjectId
points to freely.
Ordering
To facilitate use as a key in a BTreeMap
or other similar data
structures, ObjectId
implements PartialOrd
and Ord
.
ObjectId
's are ordered by the corresponding order of their underlying
byte values. This agrees with:
- lexicographical ordering of the object id strings
- JavaScript's ordering of object id strings
- ordering of
RawObjectId
s
Note: when running on the official screeps server, or on a private
server backed by a MongoDB database, this ordering roughly corresponds to
creation order. The first four bytes of a MongoDB-created ObjectId
are
seconds since the epoch when the id was created, so up to a second
accuracy, these ids will be sorted by object creation time.
Implementations
impl<T> ObjectId<T>
[src]
pub fn into_type<U>(self) -> ObjectId<U>
[src]
Changes the type this ObjectId
points to, unchecked.
This will allow changing to any type - ObjectId
makes no guarantees
about its ID matching the type of any object in the game that it
actually points to.
pub fn from_packed(packed: [u32; 3]) -> Self
[src]
Creates an object ID from its packed representation.
The input to this function is the bytes representing the up-to-24 hex digits in the object id.
See also RawObjectId::from_packed
.
pub fn from_packed_js_val(
packed_val: Reference
) -> Result<Self, ConversionError>
[src]
packed_val: Reference
) -> Result<Self, ConversionError>
Creates an object ID from a packed representation stored in JavaScript.
The input must be a reference to a length-3 array of integers.
Recommended to be used with the object_id_to_packed
JavaScript utility
function, which takes in a string and returns the array of three
integers that this function expects.
Example
use screeps::{prelude::*, traits::TryInto, Creep, ObjectId}; use stdweb::js; let packed_obj_id = (js! { let creep = _.sample(Game.creeps); return object_id_to_packed(creep.id); }) .try_into() .unwrap(); let parsed: ObjectId<Creep> = ObjectId::from_packed_js_val(packed_obj_id).unwrap(); println!("found creep with id {}", parsed);
See also RawObjectId::from_packed_js_val
.
pub fn to_u128(self) -> u128
[src]
Converts this object ID to a u128
number.
The returned number, when formatted as hex, will produce a string parseable into this object id.
The returned number will be less than or equal to 2^96 - 1
, as that's
the maximum value that RawObjectId
can hold.
pub fn to_array_string(&self) -> ArrayString<[u8; 24]>
[src]
Formats this object ID as a string on the stack.
This is equivalent to ToString::to_string
, but involves no
allocation.
To use the produced string in stdweb, use &*
to convert it to a string
slice.
This is less efficient than ObjectId::unsafe_as_uploaded
, but
easier to get right.
Example
use screeps::{prelude::*, Creep, ObjectId}; use stdweb::js; let object_id = screeps::game::creeps::values()[0].id(); let str_repr = object_id.to_array_string(); js! { let id = @{&*str_repr}; console.log("we have a creep with the id " + id); }
See also RawObjectId::to_array_string
.
pub unsafe fn unsafe_as_uploaded(&self) -> UnsafeTypedArray<'_, u32>
[src]
Creates an array accessible from JavaScript which represents part of this object id's packed representation.
Specifically, the resulting array will contain the first non-zero number
in this object id, and all following numbers. This allows for a more
efficient object_id_from_packed
implementation.
Safety
This is highly unsafe.
This creates an UnsafeTypedArray
and does not use it in JS, so the
restrictions from UnsafeTypedArray
apply. When you call into
JavaScript using it, you must "use" it immediately before calling into
any Rust code whatsoever.
There are other safety concerns as well, but all deriving from
UnsafeTypedArray
. See UnsafeTypedArray
.
Example
use screeps::{prelude::*, Creep, ObjectId}; use stdweb::js; let object_id = screeps::game::creeps::values()[0].id(); let array_view = unsafe { object_id.unsafe_as_uploaded() }; js! { let id = object_id_from_packed(@{array_view}); console.log("we have a creep with the id " + id); }
See also RawObjectId::unsafe_as_uploaded
.
pub fn try_resolve(self) -> Result<Option<T>, ConversionError> where
T: HasId + SizedRoomObject,
[src]
T: HasId + SizedRoomObject,
Resolves this object ID into an object.
This is a shortcut for game::get_object_typed(id)
Errors
Will return an error if this ID's type does not match the object it points to.
Will return Ok(None)
if the object no longer exists, or is in a room
we don't have vision for.
pub fn resolve(self) -> Option<T> where
T: HasId + SizedRoomObject,
[src]
T: HasId + SizedRoomObject,
Resolves this ID into an object, panicking on type mismatch.
This is a shortcut for id.try_resolve().expect(...)
Panics
Will panic if this ID points to an object which is not of type T
.
Will return None
if this object no longer exists, or is in a room we
don't have vision for.
Trait Implementations
impl<T> Clone for ObjectId<T>
[src]
impl<T> Copy for ObjectId<T>
[src]
impl<T> Debug for ObjectId<T>
[src]
impl<'de, T> Deserialize<'de> for ObjectId<T>
[src]
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
[src]
__D: Deserializer<'de>,
impl<T> Display for ObjectId<T>
[src]
impl<T> Eq for ObjectId<T>
[src]
impl<T> From<[u32; 3]> for ObjectId<T>
[src]
impl<T> From<ObjectId<T>> for RawObjectId
[src]
impl<T> From<ObjectId<T>> for ArrayString<[u8; 24]>
[src]
impl<T> From<ObjectId<T>> for String
[src]
impl<T> From<ObjectId<T>> for u128
[src]
impl<T> From<ObjectId<T>> for [u32; 3]
[src]
impl<T> From<RawObjectId> for ObjectId<T>
[src]
fn from(raw: RawObjectId) -> Self
[src]
impl<T> FromStr for ObjectId<T>
[src]
type Err = RawObjectIdParseError
The associated error which can be returned from parsing.
fn from_str(s: &str) -> Result<Self, RawObjectIdParseError>
[src]
impl<T> Hash for ObjectId<T>
[src]
fn hash<H: Hasher>(&self, state: &mut H)
[src]
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl<T> Ord for ObjectId<T>
[src]
fn cmp(&self, other: &Self) -> Ordering
[src]
#[must_use]fn max(self, other: Self) -> Self
1.21.0[src]
#[must_use]fn min(self, other: Self) -> Self
1.21.0[src]
#[must_use]fn clamp(self, min: Self, max: Self) -> Self
[src]
impl<T> PartialEq<ObjectId<T>> for ObjectId<T>
[src]
impl<T> PartialEq<ObjectId<T>> for RawObjectId
[src]
fn eq(&self, other: &ObjectId<T>) -> bool
[src]
#[must_use]fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl<T> PartialEq<RawObjectId> for ObjectId<T>
[src]
fn eq(&self, other: &RawObjectId) -> bool
[src]
#[must_use]fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl<T> PartialOrd<ObjectId<T>> for ObjectId<T>
[src]
fn partial_cmp(&self, other: &ObjectId<T>) -> Option<Ordering>
[src]
#[must_use]fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn le(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn gt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn ge(&self, other: &Rhs) -> bool
1.0.0[src]
impl<T> PartialOrd<ObjectId<T>> for RawObjectId
[src]
fn partial_cmp(&self, other: &ObjectId<T>) -> Option<Ordering>
[src]
#[must_use]fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn le(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn gt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn ge(&self, other: &Rhs) -> bool
1.0.0[src]
impl<T> PartialOrd<RawObjectId> for ObjectId<T>
[src]
fn partial_cmp(&self, other: &RawObjectId) -> Option<Ordering>
[src]
#[must_use]fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn le(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn gt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn ge(&self, other: &Rhs) -> bool
1.0.0[src]
impl<T> Serialize for ObjectId<T>
[src]
fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error> where
__S: Serializer,
[src]
__S: Serializer,
impl<T> TryFrom<u128> for ObjectId<T>
[src]
type Error = RawObjectIdParseError
The type returned in the event of a conversion error.
fn try_from(val: u128) -> Result<Self, RawObjectIdParseError>
[src]
Auto Trait Implementations
impl<T> RefUnwindSafe for ObjectId<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Send for ObjectId<T> where
T: Send,
T: Send,
impl<T> Sync for ObjectId<T> where
T: Sync,
T: Sync,
impl<T> Unpin for ObjectId<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for ObjectId<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> DeserializeOwned for T where
T: for<'de> Deserialize<'de>,
[src]
T: for<'de> Deserialize<'de>,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> IntoExpectedType<U> for T where
U: FromExpectedType<T>,
[src]
U: FromExpectedType<T>,
fn into_expected_type(Self) -> Result<U, ConversionError>
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,