pub struct DomainRejection {
pub code: RejectionCode,
pub message_key: String,
pub details: Box<Value>,
pub explanation: Option<Box<LocalizedText>>,
pub argument: Option<String>,
}Expand description
A domain refused an act or a command (spec §8.2).
details is application-defined structured data for the UI; it must not be
interpolated into logs.
Fields§
§code: RejectionCodeStable machine-readable code.
message_key: StringKey of the user-facing message in the application’s copy catalog.
details: Box<Value>Structured details (field names, limits…).
Boxed for the same reason Self::explanation is: a rejection travels
in the Err half of every compile and validate call, so the size of the
unhappy path is the size of every call’s return value. A JSON document
is the largest thing here and the least often read.
explanation: Option<Box<LocalizedText>>Why, in words the user can read.
Self::message_key names copy in the application’s own catalog, which
is the right shape when an application has one and no use to the runtime
when it does not: composition has to write a sentence and cannot resolve
a key it knows nothing about. So a rejection may carry its own copy, the
way a receipt does.
When it does, the turn tells the user the act was refused and why. When it does not, the turn still says an act was refused, in the runtime’s own words, because the alternative is what this field was added to fix: an assistant that cannot report a failure says something unrelated instead, and the user concludes the write succeeded.
Boxed because a DomainRejection travels inside the Err half of every
compile and validate call, and copy is much larger than a code: putting
it inline widens the error variant that every one of those returns.
argument: Option<String>The argument the rejection is about, as a JSON Pointer into the act’s arguments.
Present, the value can be asked for again; absent, the act is refused as it stands.
Implementations§
Source§impl DomainRejection
impl DomainRejection
Sourcepub fn new(
code: impl Into<RejectionCode>,
message_key: impl Into<String>,
) -> Self
pub fn new( code: impl Into<RejectionCode>, message_key: impl Into<String>, ) -> Self
Builds a rejection without details.
Sourcepub fn with_details(self, details: Value) -> Self
pub fn with_details(self, details: Value) -> Self
Attaches structured details.
Sourcepub fn on_argument(self, pointer: impl Into<String>) -> Self
pub fn on_argument(self, pointer: impl Into<String>) -> Self
Says the rejection is about one argument, which the user may give again.
Sourcepub fn with_explanation(self, explanation: LocalizedText) -> Self
pub fn with_explanation(self, explanation: LocalizedText) -> Self
Attaches the sentence the user should read.
Write it the way you write a receipt’s body: server-authored copy, in the languages the workflow answers in. It reaches the user as a notice whether or not a model runs, and the narrator is shown it so its prose does not contradict what the notice says.
Trait Implementations§
Source§impl Clone for DomainRejection
impl Clone for DomainRejection
Source§impl Debug for DomainRejection
impl Debug for DomainRejection
Source§impl<'de> Deserialize<'de> for DomainRejection
impl<'de> Deserialize<'de> for DomainRejection
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Display for DomainRejection
impl Display for DomainRejection
impl Eq for DomainRejection
Source§impl Error for DomainRejection
impl Error for DomainRejection
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl From<DomainRejection> for ErasedCallError
impl From<DomainRejection> for ErasedCallError
Source§fn from(value: DomainRejection) -> Self
fn from(value: DomainRejection) -> Self
Source§impl From<DomainRejection> for OrchestratorError
impl From<DomainRejection> for OrchestratorError
Source§fn from(value: DomainRejection) -> Self
fn from(value: DomainRejection) -> Self
Source§impl From<DomainRejection> for PlannedActResult
impl From<DomainRejection> for PlannedActResult
Source§fn from(rejection: DomainRejection) -> Self
fn from(rejection: DomainRejection) -> Self
Source§impl PartialEq for DomainRejection
impl PartialEq for DomainRejection
Source§impl Serialize for DomainRejection
impl Serialize for DomainRejection
impl StructuralPartialEq for DomainRejection
Auto Trait Implementations§
impl Freeze for DomainRejection
impl RefUnwindSafe for DomainRejection
impl Send for DomainRejection
impl Sync for DomainRejection
impl Unpin for DomainRejection
impl UnsafeUnpin for DomainRejection
impl UnwindSafe for DomainRejection
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.