1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//! UCP Schema Resolver
//!
//! Runtime resolution of `ucp_request` and `ucp_response` annotations.
//!
//! This library transforms JSON Schemas with UCP annotations into standard JSON Schemas
//! based on direction (request/response) and operation (create, read, update, etc.).
//!
//! # Example
//!
//! ```
//! use ucp_schema::{resolve, Direction, ResolveOptions};
//! use serde_json::json;
//!
//! let schema = json!({
//! "type": "object",
//! "properties": {
//! "id": {
//! "type": "string",
//! "ucp_request": {
//! "create": "omit",
//! "update": "required"
//! }
//! },
//! "name": { "type": "string" }
//! }
//! });
//!
//! let options = ResolveOptions::new(Direction::Request, "create");
//! let resolved = resolve(&schema, &options).unwrap();
//!
//! // In the resolved schema, "id" is omitted for create requests
//! assert!(resolved["properties"].get("id").is_none());
//! assert!(resolved["properties"].get("name").is_some());
//! ```
//!
//! # Visibility Rules
//!
//! | Visibility | Effect on `properties` | Effect on `required` |
//! |------------|------------------------|----------------------|
//! | `"omit"` | Remove field | Remove from required |
//! | `"required"` | Keep field | Add to required |
//! | `"optional"` | Keep field | Remove from required |
//! | (none) | Keep field | Preserve original |
//!
//! # Annotation Format
//!
//! Annotations can be shorthand (applies to all operations):
//! ```json
//! { "ucp_request": "omit" }
//! ```
//!
//! Or per-operation:
//! ```json
//! { "ucp_request": { "create": "omit", "update": "required" } }
//! ```
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;