mirror of
https://codeberg.org/icewind/php-literal-parser.git
synced 2026-06-03 10:34:08 +02:00
fix nested arrays with serde
This commit is contained in:
parent
9d3295daff
commit
0127eecad2
5 changed files with 230 additions and 47 deletions
94
tests/serde.rs
Normal file
94
tests/serde.rs
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
use miette::Report;
|
||||
use php_literal_parser::from_str;
|
||||
use serde_derive::Deserialize;
|
||||
|
||||
#[test]
|
||||
fn test_parse_struct() {
|
||||
let code = r#"
|
||||
['name' => 'Api#get', 'url' => '/api/v{version}/{fileId}', 'verb' => 'GET']
|
||||
"#;
|
||||
let result: Route = match from_str(code) {
|
||||
Ok(result) => result,
|
||||
Err(error) => {
|
||||
let error = Report::from(error);
|
||||
eprintln!("Error while parsing return literal: {error:?}");
|
||||
panic!();
|
||||
}
|
||||
};
|
||||
assert_eq!(
|
||||
Route {
|
||||
name: "Api#get".into(),
|
||||
url: "/api/v{version}/{fileId}".into(),
|
||||
verb: "GET".into(),
|
||||
},
|
||||
result
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_vec_of_structs() {
|
||||
let code = r#"
|
||||
[
|
||||
['name' => 'Api#get', 'url' => '/api/v{version}/{fileId}', 'verb' => 'GET'],
|
||||
]
|
||||
"#;
|
||||
let result: Vec<Route> = match from_str(code) {
|
||||
Ok(result) => result,
|
||||
Err(error) => {
|
||||
let error = Report::from(error);
|
||||
eprintln!("Error while parsing return literal: {error:?}");
|
||||
panic!();
|
||||
}
|
||||
};
|
||||
assert_eq!(
|
||||
vec![Route {
|
||||
name: "Api#get".into(),
|
||||
url: "/api/v{version}/{fileId}".into(),
|
||||
verb: "GET".into(),
|
||||
}],
|
||||
result
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_struct_of_vecs_of_structs() {
|
||||
let code = r#"[
|
||||
'ocs' => [
|
||||
['name' => 'Api#get', 'url' => '/api/v{version}/{fileId}', 'verb' => 'GET'],
|
||||
],
|
||||
]"#;
|
||||
let result = match from_str(code) {
|
||||
Ok(result) => result,
|
||||
Err(error) => {
|
||||
let error = Report::from(error);
|
||||
eprintln!("Error while parsing return literal: {error:?}");
|
||||
panic!();
|
||||
}
|
||||
};
|
||||
assert_eq!(
|
||||
AppRoutes {
|
||||
routes: Vec::new(),
|
||||
ocs: vec![Route {
|
||||
name: "Api#get".into(),
|
||||
url: "/api/v{version}/{fileId}".into(),
|
||||
verb: "GET".into(),
|
||||
}]
|
||||
},
|
||||
result
|
||||
);
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Clone, Deserialize, PartialEq)]
|
||||
pub struct AppRoutes {
|
||||
#[serde(default)]
|
||||
routes: Vec<Route>,
|
||||
#[serde(default)]
|
||||
ocs: Vec<Route>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Deserialize, PartialEq)]
|
||||
pub struct Route {
|
||||
url: String,
|
||||
name: String,
|
||||
verb: String,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue