@@ -18,8 +18,6 @@ use crate::{
18
18
PyroscopeError ,
19
19
} ;
20
20
21
- use json;
22
-
23
21
use crate :: backend:: BackendImpl ;
24
22
use crate :: pyroscope:: Compression :: GZIP ;
25
23
use crate :: pyroscope:: ReportEncoding :: PPROF ;
@@ -841,16 +839,13 @@ impl PyroscopeAgent<PyroscopeAgentRunning> {
841
839
842
840
pub fn parse_http_headers_json ( http_headers_json : String ) -> Result < HashMap < String , String > > {
843
841
let mut http_headers = HashMap :: new ( ) ;
844
- let parsed = json:: parse ( & http_headers_json) ?;
845
- if !parsed. is_object ( ) {
846
- return Err ( PyroscopeError :: AdHoc ( format ! (
847
- "expected object, got {}" ,
848
- parsed
849
- ) ) ) ;
850
- }
851
- for ( k, v) in parsed. entries ( ) {
852
- if v. is_string ( ) {
853
- http_headers. insert ( k. to_string ( ) , v. to_string ( ) ) ;
842
+ let parsed: serde_json:: Value = serde_json:: from_str ( & http_headers_json) ?;
843
+ let parsed = parsed. as_object ( ) . ok_or_else ( ||
844
+ PyroscopeError :: AdHoc ( format ! ( "expected object, got {}" , parsed) )
845
+ ) ?;
846
+ for ( k, v) in parsed {
847
+ if let Some ( value) = v. as_str ( ) {
848
+ http_headers. insert ( k. to_string ( ) , value. to_string ( ) ) ;
854
849
} else {
855
850
return Err ( PyroscopeError :: AdHoc ( format ! (
856
851
"invalid http header value, not a string: {}" ,
@@ -862,17 +857,14 @@ pub fn parse_http_headers_json(http_headers_json: String) -> Result<HashMap<Stri
862
857
}
863
858
864
859
pub fn parse_vec_string_json ( s : String ) -> Result < Vec < String > > {
865
- let parsed = json:: parse ( & s) ?;
866
- if !parsed. is_array ( ) {
867
- return Err ( PyroscopeError :: AdHoc ( format ! (
868
- "expected array, got {}" ,
869
- parsed
870
- ) ) ) ;
871
- }
860
+ let parsed: serde_json:: Value = serde_json:: from_str ( & s) ?;
861
+ let parsed = parsed. as_array ( ) . ok_or_else ( ||
862
+ PyroscopeError :: AdHoc ( format ! ( "expected array, got {}" , parsed) )
863
+ ) ?;
872
864
let mut res = Vec :: with_capacity ( parsed. len ( ) ) ;
873
- for v in parsed. members ( ) {
874
- if v . is_string ( ) {
875
- res. push ( v . to_string ( ) ) ;
865
+ for v in parsed {
866
+ if let Some ( s ) = v . as_str ( ) {
867
+ res. push ( s . to_string ( ) ) ;
876
868
} else {
877
869
return Err ( PyroscopeError :: AdHoc ( format ! (
878
870
"invalid element value, not a string: {}" ,
0 commit comments