rustev_contract/
request.rs1use serde::{Deserialize, Serialize};
12
13use crate::definition::RequiredKind;
14use crate::descriptor::OutputKind;
15use crate::ids::{ArtifactId, DescriptorId, RequestId};
16use crate::limits::REQUEST_V1;
17use crate::plan::Normalization;
18use crate::schema;
19use crate::scope::Scope;
20
21#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
22#[serde(deny_unknown_fields)]
23pub struct RequestDoc {
24 pub schema: String,
25 pub scope: Scope,
26 pub backend_id: String,
28 pub artifact: ArtifactId,
29 pub descriptor: DescriptorId,
31 pub projection: String,
34 pub output: OutputKind,
35 pub requires: RequiredKind,
36 pub normalization: Normalization,
37}
38
39crate::document::document!(RequestDoc, schema::REQUEST, REQUEST_V1, RequestId);
40
41#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
44#[serde(tag = "operation", rename_all = "snake_case", deny_unknown_fields)]
45pub enum ExtractionRequestOperation {
46 Extract {
47 plan_id: crate::ids::PlanId,
48 request: crate::extraction_documents::ExtractRequest,
49 },
50}
51
52impl ExtractionRequestOperation {
53 pub fn projection(&self) -> Result<String, crate::canonical::CanonicalError> {
55 String::from_utf8(crate::canonical::canonical_bytes(self)?).map_err(|e| {
57 crate::canonical::CanonicalError::Serialize {
58 message: e.to_string(),
59 }
60 })
61 }
62}