pub struct DescribeWorkflowResponse {
pub summary: Option<WorkflowSummary>,
pub history: Vec<Event>,
pub unserved: Vec<UnservedActivity>,
pub generations: Vec<RunGeneration>,
}Expand description
Response to a describe-workflow request.
history is the run’s events as plain serialized Event values (never a
protobuf-derived envelope), so the ops console decodes each entry directly.
When include_history is false the server returns an empty history.
unserved is computed independently of include_history: it is the answer
to “can anything still advance this run”, and an operator who asked for the
summary alone still needs it.
Fields§
§summary: Option<WorkflowSummary>Workflow summary projected from authoritative history, when the workflow exists.
history: Vec<Event>The run’s event history as plain serialized events.
unserved: Vec<UnservedActivity>Every activity this run’s history records as dispatched and unterminated that the fleet cannot currently serve.
EMPTY is the healthy answer, and it is the only healthy answer: an
activity a live compatible worker could take is never listed here. A
non-empty list is the difference between “a worker is working on it” and
“it is parked with nobody to take it”, which the projected
crate::WorkflowStatus alone cannot express — Running covers both.
generations: Vec<RunGeneration>Every generation boundary in this workflow’s WHOLE history, ascending —
one entry per WorkflowStarted.
This is the answer to “which run does the event at sequence n belong
to”: the last boundary at or before n. It is stated by the server
because only the server holds the whole history, and a reader that
derives it from a window can only be right when the window happens to
contain the boundary.
🔴 THIS EXISTS BECAUSE DERIVING IT CLIENT-SIDE FAILS SILENTLY AND
TOTALLY. The ops console scanned its loaded window (500 events) for
WorkflowStarted; on any workflow longer than one window the boundary is
never in it, so every attempt row rendered “run unknown” — an accurate
admission of ignorance on every row, which trains an operator to ignore
the column. Computed from the same history the summary is projected
from, so it costs no additional read and cannot disagree with it.
Trait Implementations§
Source§impl Clone for DescribeWorkflowResponse
impl Clone for DescribeWorkflowResponse
Source§fn clone(&self) -> DescribeWorkflowResponse
fn clone(&self) -> DescribeWorkflowResponse
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for DescribeWorkflowResponse
impl Debug for DescribeWorkflowResponse
Source§impl<'de> Deserialize<'de> for DescribeWorkflowResponse
impl<'de> Deserialize<'de> for DescribeWorkflowResponse
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 PartialEq for DescribeWorkflowResponse
impl PartialEq for DescribeWorkflowResponse
Source§impl Serialize for DescribeWorkflowResponse
impl Serialize for DescribeWorkflowResponse
impl StructuralPartialEq for DescribeWorkflowResponse
Source§impl TS for DescribeWorkflowResponse
impl TS for DescribeWorkflowResponse
Source§type WithoutGenerics = DescribeWorkflowResponse
type WithoutGenerics = DescribeWorkflowResponse
WithoutGenerics should just be Self.
If the type does have generic parameters, then all generic parameters must be replaced with
a dummy type, e.g ts_rs::Dummy or (). The only requirement for these dummy types is that
EXPORT_TO must be None. Read moreSource§type OptionInnerType = DescribeWorkflowResponse
type OptionInnerType = DescribeWorkflowResponse
std::option::Option<T>, then this associated type is set to T.
All other implementations of TS should set this type to Self instead.Source§fn docs() -> Option<String>
fn docs() -> Option<String>
TS is derived, docs are
automatically read from your doc comments or #[doc = ".."] attributesSource§fn decl_concrete(cfg: &Config) -> String
fn decl_concrete(cfg: &Config) -> String
TS::decl().
If this type is not generic, then this function is equivalent to TS::decl().Source§fn decl(cfg: &Config) -> String
fn decl(cfg: &Config) -> String
type User = { user_id: number, ... }.
This function will panic if the type has no declaration. Read moreSource§fn inline(cfg: &Config) -> String
fn inline(cfg: &Config) -> String
{ user_id: number }.
This function will panic if the type cannot be inlined.Source§fn inline_flattened(cfg: &Config) -> String
fn inline_flattened(cfg: &Config) -> String
Source§fn visit_generics(v: &mut impl TypeVisitor)where
Self: 'static,
fn visit_generics(v: &mut impl TypeVisitor)where
Self: 'static,
Source§fn output_path() -> Option<PathBuf>
fn output_path() -> Option<PathBuf>
T should be exported, relative to the output directory.
The returned path does not include any base directory. Read moreSource§fn visit_dependencies(v: &mut impl TypeVisitor)where
Self: 'static,
fn visit_dependencies(v: &mut impl TypeVisitor)where
Self: 'static,
Source§fn dependencies(cfg: &Config) -> Vec<Dependency>where
Self: 'static,
fn dependencies(cfg: &Config) -> Vec<Dependency>where
Self: 'static,
Source§fn export(cfg: &Config) -> Result<(), ExportError>where
Self: 'static,
fn export(cfg: &Config) -> Result<(), ExportError>where
Self: 'static,
TS::export_all. Read moreSource§fn export_all(cfg: &Config) -> Result<(), ExportError>where
Self: 'static,
fn export_all(cfg: &Config) -> Result<(), ExportError>where
Self: 'static,
TS::export. Read more