Skip to main content

Rating

Struct Rating 

Source
pub struct Rating {
    pub total_reviews: u64,
    pub total_rating: f64,
    pub last_rating: u8,
    pub max_rate: u8,
    pub min_rate: u8,
    pub since: Option<u64>,
}
Expand description

User reputation snapshot, suitable for publishing as Nostr tags.

The fields are the same aggregates stored on crate::user::User, but typed for transport (unsigned integers for counts, u8 for rating values).

Fields§

§total_reviews: u64

Total number of ratings received.

§total_rating: f64

Weighted rating average across all reviews.

§last_rating: u8

Most recent rating, in the MIN_RATING..=MAX_RATING range.

§max_rate: u8

Highest rating ever received.

§min_rate: u8

Lowest rating ever received.

§since: Option<u64>

Unix timestamp of the user’s first trade, truncated to the start of its UTC day, or None from a peer that does not publish it yet.

Supersedes the days count the daemon publishes alongside it. A day count is derived when the event is written, so it is stale on any event that sits on relays for a while, and it cannot be merged when reputation is imported from another venue; a date can be.

Day precision is deliberate rather than incidental. This value travels on every order of the same user, so a second-precision timestamp would be a fingerprint linking their trade pubkeys together.

Skipped when absent, so a Rating that never sets it serializes exactly as it did before this field existed. Always published truncated to its UTC day, in JSON and in tags, however it was set.

Implementations§

Source§

impl Rating

Source

pub fn new( total_reviews: u64, total_rating: f64, last_rating: u8, min_rate: u8, max_rate: u8, ) -> Self

Construct a new Rating from its individual components.

Leaves Rating::since unset; add it with Rating::with_since. The signature is deliberately unchanged so no caller has to move.

Source

pub fn with_since(self, since: u64) -> Self

Attach the date of the user’s first trade.

since is truncated to the start of its UTC day with the same rule as day_truncate, so a caller that passes a raw timestamp cannot leak second precision.

Source

pub fn from_json(json: &str) -> Result<Self, ServiceError>

Parse a Rating from its JSON representation.

Returns ServiceError::MessageSerializationError if json is not a valid serialization of this type.

Source

pub fn as_json(&self) -> Result<String, ServiceError>

Serialize the rating to a JSON string.

Source

pub fn to_tags(&self) -> Tags

Encode the rating as a set of Nostr tags, ready to attach to an event.

Returns a Tags value with one entry per numeric field plus a z marker tag identifying the payload as a rating. Encoding is infallible (nostr 0.45 Tag::custom takes string kind keys directly).

Source

pub fn from_tags(tags: Tags) -> Result<Self, ServiceError>

Rebuild a Rating from a set of Nostr tags previously produced by Rating::to_tags.

Unknown tag keys are ignored so that the function keeps working if the server adds new metadata fields. Returns a ServiceError if a required key carries a non-parseable value.

Trait Implementations§

Source§

impl Clone for Rating

Source§

fn clone(&self) -> Self

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 Rating

Source§

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

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

impl<'de> Deserialize<'de> for Rating

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 Serialize for Rating

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<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

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

Source§

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

Source§

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

Source§

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

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

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

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

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

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

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

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

Source§

type Error = !

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

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

Performs the conversion.
Source§

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

Source§

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

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

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

Performs the conversion.
Source§

impl<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more
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