Skip to main content

Referrer

Enum Referrer 

Source
pub enum Referrer {
    Address {
        address: String,
    },
    Code {
        code: String,
    },
}
Expand description

Partner referral tracking information.

The upstream CoW Protocol app-data schema for referrer changed shape between v1.13.0 and v1.14.0:

Schema versionShapePattern
v0.1.0 – v1.13.0{ "address": "0x…" } (partner Ethereum address)^0x[a-fA-F0-9]{40}$
v1.14.0+{ "code": "ABCDE" } (affiliate code, uppercase)^[A-Z0-9_-]{5,20}$

Both forms are modelled as variants of this enum with #[serde(untagged)], so a single Referrer value deserialises correctly from either shape and serialises back into the same shape. Runtime schema validation via [super::schema::validate] dispatches on the document’s declared version and picks the matching bundled schema, so an Address-flavoured referrer must accompany a v1.13.0-or-earlier document and a Code-flavoured one a v1.14.0+ document.

§Construction

Prefer the dedicated constructors Referrer::address and Referrer::code; Referrer::new is kept as a deprecated alias for the address form so existing v1.13.0-era code keeps compiling.

Variants§

§

Address

Legacy form used by schema versions up to and including v1.13.0.

Fields

§address: String

Partner’s Ethereum address (0x-prefixed, 40 hex chars).

§

Code

Current form used by schema v1.14.0 and later.

Fields

§code: String

Affiliate / referral code. Case-insensitive but expected to be stored uppercase; must match ^[A-Z0-9_-]{5,20}$.

Implementations§

Source§

impl Referrer

Source

pub fn address(address: impl Into<String>) -> Self

Construct an address-flavoured referrer (schema v0.1.0 – v1.13.0).

The address is stored verbatim; callers are responsible for passing a well-formed 0x-prefixed 40-character hex string. Runtime schema validation under v1.13.0 rejects non-conforming values.

§Example
use cow_app_data::Referrer;

let r = Referrer::address("0xb6BAd41ae76A11D10f7b0E664C5007b908bC77C9");
assert_eq!(r.as_address(), Some("0xb6BAd41ae76A11D10f7b0E664C5007b908bC77C9"));
assert_eq!(r.as_code(), None);
Source

pub fn code(code: impl Into<String>) -> Self

Construct a code-flavoured referrer (schema v1.14.0+).

The code is stored verbatim; callers are responsible for matching the upstream regex ^[A-Z0-9_-]{5,20}$. Runtime schema validation under v1.14.0 rejects non-conforming values.

§Example
use cow_app_data::Referrer;

let r = Referrer::code("COWRS");
assert_eq!(r.as_code(), Some("COWRS"));
assert_eq!(r.as_address(), None);
Source

pub fn new(address: impl Into<String>) -> Self

👎Deprecated since 1.1.0:

use Referrer::address or Referrer::code explicitly

Deprecated alias for Referrer::address — kept so existing v1.13.0-era call sites keep compiling unchanged.

New code should call Referrer::address or Referrer::code explicitly to make the schema-version affinity obvious.

Source

pub const fn as_address(&self) -> Option<&str>

Return the address string if this is an Self::Address variant.

Source

pub const fn as_code(&self) -> Option<&str>

Return the code string if this is a Self::Code variant.

Trait Implementations§

Source§

impl Clone for Referrer

Source§

fn clone(&self) -> Referrer

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

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Referrer

Source§

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

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

impl<'de> Deserialize<'de> for Referrer

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 Referrer

Source§

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

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

impl Serialize for Referrer

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<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> 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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

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

impl<T> ToStringFallible for T
where T: Display,

Source§

fn try_to_string(&self) -> Result<String, TryReserveError>

ToString::to_string, but without panic on OOM.

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

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