@@ -4,8 +4,8 @@ use serde_json::Value;
44
55use crate :: error:: ParseError ;
66use crate :: model:: {
7- ApiSpec , ContentSchema , DispatchConfig , Message , MiddlewareConfig , ObservabilityConfig ,
8- Operation , Parameter , RequestBody , SpecFormat ,
7+ ApiSpec , ContentSchema , DispatchConfig , Message , MiddlewareConfig , Operation , Parameter ,
8+ RequestBody , SpecFormat ,
99} ;
1010
1111/// HTTP methods we recognize in OpenAPI paths.
@@ -50,9 +50,6 @@ pub fn parse_spec(input: &str) -> Result<ApiSpec, ParseError> {
5050 // Extract global middlewares
5151 let global_middlewares = extract_middlewares ( root_obj) ;
5252
53- // Extract global observability config
54- let observability = extract_observability ( root_obj) ;
55-
5653 // Parse operations based on format
5754 let operations = match format {
5855 SpecFormat :: OpenApi => parse_openapi_paths ( root_obj) ?,
@@ -67,7 +64,6 @@ pub fn parse_spec(input: &str) -> Result<ApiSpec, ParseError> {
6764 api_version,
6865 operations,
6966 global_middlewares,
70- observability,
7167 extensions,
7268 } )
7369}
@@ -134,19 +130,6 @@ fn extract_dispatch(obj: &serde_json::Map<String, Value>) -> Option<DispatchConf
134130 . and_then ( |v| serde_json:: from_value ( v. clone ( ) ) . ok ( ) )
135131}
136132
137- /// Extract x-barbacane-observability from an object.
138- fn extract_observability ( obj : & serde_json:: Map < String , Value > ) -> ObservabilityConfig {
139- obj. get ( "x-barbacane-observability" )
140- . and_then ( |v| serde_json:: from_value ( v. clone ( ) ) . ok ( ) )
141- . unwrap_or_default ( )
142- }
143-
144- /// Extract optional x-barbacane-observability from an object.
145- fn extract_observability_opt ( obj : & serde_json:: Map < String , Value > ) -> Option < ObservabilityConfig > {
146- obj. get ( "x-barbacane-observability" )
147- . and_then ( |v| serde_json:: from_value ( v. clone ( ) ) . ok ( ) )
148- }
149-
150133/// Parse OpenAPI 3.x paths into operations.
151134fn parse_openapi_paths (
152135 root : & serde_json:: Map < String , Value > ,
@@ -195,8 +178,6 @@ fn parse_openapi_paths(
195178 None
196179 } ;
197180
198- let observability = extract_observability_opt ( op_obj) ;
199-
200181 // Extract deprecated flag (standard OpenAPI field)
201182 let deprecated = op_obj
202183 . get ( "deprecated" )
@@ -219,7 +200,6 @@ fn parse_openapi_paths(
219200 request_body,
220201 dispatch,
221202 middlewares,
222- observability,
223203 deprecated,
224204 sunset,
225205 extensions,
@@ -375,9 +355,6 @@ fn parse_asyncapi_channels(
375355 None
376356 } ;
377357
378- // Extract observability
379- let observability = extract_observability_opt ( op_obj) ;
380-
381358 // Extract deprecated and sunset
382359 let deprecated = op_obj
383360 . get ( "deprecated" )
@@ -399,7 +376,6 @@ fn parse_asyncapi_channels(
399376 request_body,
400377 dispatch,
401378 middlewares,
402- observability,
403379 deprecated,
404380 sunset,
405381 extensions,
@@ -822,56 +798,6 @@ paths:
822798 assert ! ( op. extensions. contains_key( "x-barbacane-cache" ) ) ;
823799 }
824800
825- #[ test]
826- fn parse_observability_config ( ) {
827- let yaml = r#"
828- openapi: "3.1.0"
829- info:
830- title: Test API
831- version: "1.0.0"
832- x-barbacane-observability:
833- trace_sampling: 0.1
834- detailed_validation_logs: true
835- latency_slo_ms: 50
836- paths:
837- /fast:
838- get:
839- x-barbacane-dispatch:
840- name: mock
841- x-barbacane-observability:
842- trace_sampling: 1.0
843- latency_slo_ms: 10
844- /slow:
845- get:
846- x-barbacane-dispatch:
847- name: mock
848- "# ;
849- let spec = parse_spec ( yaml) . unwrap ( ) ;
850-
851- // Check global observability config
852- assert_eq ! ( spec. observability. trace_sampling, Some ( 0.1 ) ) ;
853- assert_eq ! ( spec. observability. detailed_validation_logs, Some ( true ) ) ;
854- assert_eq ! ( spec. observability. latency_slo_ms, Some ( 50 ) ) ;
855-
856- // Check operation-level override
857- let fast_op = spec
858- . operations
859- . iter ( )
860- . find ( |op| op. path == "/fast" )
861- . unwrap ( ) ;
862- let fast_obs = fast_op. observability . as_ref ( ) . unwrap ( ) ;
863- assert_eq ! ( fast_obs. trace_sampling, Some ( 1.0 ) ) ;
864- assert_eq ! ( fast_obs. latency_slo_ms, Some ( 10 ) ) ;
865-
866- // Check operation without override
867- let slow_op = spec
868- . operations
869- . iter ( )
870- . find ( |op| op. path == "/slow" )
871- . unwrap ( ) ;
872- assert ! ( slow_op. observability. is_none( ) ) ;
873- }
874-
875801 #[ test]
876802 fn parse_request_body ( ) {
877803 let yaml = r#"
@@ -1233,40 +1159,4 @@ channels: {}
12331159 let result = parse_spec ( yaml) ;
12341160 assert ! ( matches!( result, Err ( ParseError :: SchemaError ( _) ) ) ) ;
12351161 }
1236-
1237- #[ test]
1238- fn parse_asyncapi_observability ( ) {
1239- let yaml = r#"
1240- asyncapi: "3.0.0"
1241- info:
1242- title: Observable API
1243- version: "1.0.0"
1244- x-barbacane-observability:
1245- trace_sampling: 0.5
1246- channels:
1247- events:
1248- address: events
1249- messages:
1250- Event:
1251- payload:
1252- type: object
1253- operations:
1254- handleEvent:
1255- action: receive
1256- channel:
1257- $ref: '#/channels/events'
1258- x-barbacane-observability:
1259- trace_sampling: 1.0
1260- x-barbacane-dispatch:
1261- name: kafka
1262- "# ;
1263- let spec = parse_spec ( yaml) . unwrap ( ) ;
1264-
1265- // Global observability
1266- assert_eq ! ( spec. observability. trace_sampling, Some ( 0.5 ) ) ;
1267-
1268- // Operation-level override
1269- let op = & spec. operations [ 0 ] ;
1270- assert_eq ! ( op. observability. as_ref( ) . unwrap( ) . trace_sampling, Some ( 1.0 ) ) ;
1271- }
12721162}
0 commit comments