allsource_core/application/dto/
schema_dto.rs1use crate::domain::entities::{CompatibilityMode, Schema};
2use chrono::{DateTime, Utc};
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5use uuid::Uuid;
6
7#[derive(Debug, Deserialize)]
9pub struct RegisterSchemaRequest {
10 pub subject: String,
11 pub schema: Value,
12 pub compatibility_mode: Option<CompatibilityModeDto>,
13 pub description: Option<String>,
14 pub tags: Option<Vec<String>>,
15}
16
17#[derive(Debug, Deserialize)]
19pub struct UpdateSchemaRequest {
20 pub description: Option<String>,
21 pub tags: Option<Vec<String>>,
22 pub compatibility_mode: Option<CompatibilityModeDto>,
23}
24
25#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)]
27#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
28pub enum CompatibilityModeDto {
29 None,
30 Backward,
31 Forward,
32 Full,
33}
34
35impl From<CompatibilityMode> for CompatibilityModeDto {
36 fn from(mode: CompatibilityMode) -> Self {
37 match mode {
38 CompatibilityMode::None => CompatibilityModeDto::None,
39 CompatibilityMode::Backward => CompatibilityModeDto::Backward,
40 CompatibilityMode::Forward => CompatibilityModeDto::Forward,
41 CompatibilityMode::Full => CompatibilityModeDto::Full,
42 }
43 }
44}
45
46impl From<CompatibilityModeDto> for CompatibilityMode {
47 fn from(dto: CompatibilityModeDto) -> Self {
48 match dto {
49 CompatibilityModeDto::None => CompatibilityMode::None,
50 CompatibilityModeDto::Backward => CompatibilityMode::Backward,
51 CompatibilityModeDto::Forward => CompatibilityMode::Forward,
52 CompatibilityModeDto::Full => CompatibilityMode::Full,
53 }
54 }
55}
56
57#[derive(Debug, Serialize)]
59pub struct SchemaDto {
60 pub id: Uuid,
61 pub subject: String,
62 pub version: u32,
63 pub schema: Value,
64 pub compatibility_mode: CompatibilityModeDto,
65 pub description: Option<String>,
66 pub tags: Vec<String>,
67 pub created_at: DateTime<Utc>,
68}
69
70impl From<&Schema> for SchemaDto {
71 fn from(schema: &Schema) -> Self {
72 Self {
73 id: schema.id(),
74 subject: schema.subject().to_string(),
75 version: schema.version(),
76 schema: schema.schema_definition().clone(),
77 compatibility_mode: schema.compatibility_mode().into(),
78 description: schema.description().map(String::from),
79 tags: schema.tags().to_vec(),
80 created_at: schema.created_at(),
81 }
82 }
83}
84
85impl From<Schema> for SchemaDto {
86 fn from(schema: Schema) -> Self {
87 SchemaDto::from(&schema)
88 }
89}
90
91#[derive(Debug, Serialize)]
93pub struct RegisterSchemaResponse {
94 pub schema: SchemaDto,
95}
96
97#[derive(Debug, Serialize)]
99pub struct ListSchemasResponse {
100 pub schemas: Vec<SchemaDto>,
101 pub count: usize,
102}
103
104#[derive(Debug, Deserialize)]
106pub struct ValidateEventRequest {
107 pub subject: String,
108 pub event: Value,
109}
110
111#[derive(Debug, Serialize)]
113pub struct ValidateEventResponse {
114 pub valid: bool,
115 pub errors: Option<Vec<String>>,
116}