added properties (cost me 3 days to make this a 15 minute task)
This commit is contained in:
parent
5a8b9d83b4
commit
0e83ee914d
9 changed files with 69 additions and 34 deletions
|
|
@ -1,4 +1,4 @@
|
|||
pub mod metadata;
|
||||
pub mod pom;
|
||||
pub mod pom_view;
|
||||
pub mod pom_reader;
|
||||
pub mod pom_parser;
|
||||
|
|
|
|||
|
|
@ -1,43 +1,46 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
/// The Maven variant to parse poms
|
||||
/// These structs is directly modelled after the XML because that is what strong-xml plugin requires
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub struct Pom {
|
||||
pub(crate) parent: Option<Parent>,
|
||||
pub(crate) group_id: Option<String>,
|
||||
pub(crate) artifact_id: String,
|
||||
pub(crate) version: Option<String>,
|
||||
pub(crate) name: String,
|
||||
pub(crate) packaging: Option<String>,
|
||||
pub(crate) url: Option<String>,
|
||||
pub(crate) dependencies: Vec<Dependency>,
|
||||
pub(crate) dependency_management: Vec<Dependency>,
|
||||
pub parent: Option<Parent>,
|
||||
pub group_id: Option<String>,
|
||||
pub artifact_id: String,
|
||||
pub version: Option<String>,
|
||||
pub name: String,
|
||||
pub packaging: Option<String>,
|
||||
pub url: Option<String>,
|
||||
pub dependencies: Vec<Dependency>,
|
||||
pub dependency_management: Vec<Dependency>,
|
||||
pub properties: HashMap<String, String>,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub struct License {
|
||||
pub(crate) name: String,
|
||||
pub(crate) url: String,
|
||||
pub(crate) distribution: Option<String>,
|
||||
pub name: String,
|
||||
pub url: String,
|
||||
pub distribution: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub struct Parent {
|
||||
pub(crate) group_id: String,
|
||||
pub(crate) artifact_id: String,
|
||||
pub(crate) version: String,
|
||||
pub group_id: String,
|
||||
pub artifact_id: String,
|
||||
pub version: String,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub struct Developer {
|
||||
pub(crate) id: Option<String>,
|
||||
pub(crate) name: String,
|
||||
pub id: Option<String>,
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Debug, Clone)]
|
||||
pub struct Dependency {
|
||||
pub(crate) group_id: String,
|
||||
pub(crate) artifact_id: String,
|
||||
pub(crate) version: Option<String>,
|
||||
pub group_id: String,
|
||||
pub artifact_id: String,
|
||||
pub version: Option<String>,
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
use crate::maven::pom::{Dependency, Developer, Parent, Pom};
|
||||
use crate::xml::SaxError;
|
||||
use crate::xml::dom_parser::{Node, get_document};
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub fn get_pom(xml: &str) -> Result<Pom, SaxError> {
|
||||
let mut group_id = None;
|
||||
|
|
@ -12,6 +13,7 @@ pub fn get_pom(xml: &str) -> Result<Pom, SaxError> {
|
|||
let mut url = None;
|
||||
let mut dependencies = vec![];
|
||||
let mut dependency_management = vec![];
|
||||
let mut properties = HashMap::new(); //useless assignment...
|
||||
|
||||
for child in get_document(xml)?.root.children {
|
||||
match child.name.as_str() {
|
||||
|
|
@ -24,6 +26,7 @@ pub fn get_pom(xml: &str) -> Result<Pom, SaxError> {
|
|||
"url" => url = child.text,
|
||||
"dependencies" => dependencies = get_dependencies(child),
|
||||
"dependencyManagement" => dependency_management = get_dependency_mgmt(child),
|
||||
"properties" => properties = get_properties(child),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
|
@ -36,12 +39,27 @@ pub fn get_pom(xml: &str) -> Result<Pom, SaxError> {
|
|||
packaging,
|
||||
url,
|
||||
dependencies,
|
||||
dependency_management
|
||||
dependency_management,
|
||||
properties,
|
||||
})
|
||||
}
|
||||
|
||||
fn get_properties(element: Node) -> HashMap<String, String> {
|
||||
let mut properties = HashMap::new();
|
||||
for property in element.children {
|
||||
properties.insert(
|
||||
property.name.clone(),
|
||||
property
|
||||
.text
|
||||
.expect(format!("Cannot read property '{}'", property.name).as_str())
|
||||
.to_string(),
|
||||
);
|
||||
}
|
||||
properties
|
||||
}
|
||||
|
||||
fn get_dependency_mgmt(element: Node) -> Vec<Dependency> {
|
||||
if !element.children.is_empty(){
|
||||
if !element.children.is_empty() {
|
||||
get_dependencies(element.children.first().unwrap().clone())
|
||||
} else {
|
||||
vec![]
|
||||
17
tests/maven/pom_parser_test.rs
Normal file
17
tests/maven/pom_parser_test.rs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
use undeepend::maven::pom_parser::get_pom;
|
||||
use undeepend::xml::dom_parser::get_document;
|
||||
|
||||
#[test]
|
||||
fn test_pom_parser() {
|
||||
let test_xml = include_str!("../maven/resources/pom.xml");
|
||||
let pom = get_pom(test_xml).expect("failed to get document");
|
||||
assert_eq!("Mockito",pom.name);
|
||||
assert_eq!(Some("org.mockito".to_string()),pom.group_id);
|
||||
assert_eq!("mockito-core",pom.artifact_id);
|
||||
assert_eq!(Some("1.9.5".to_string()),pom.version);
|
||||
assert_eq!(Some("jar".to_string()),pom.packaging);
|
||||
assert_eq!(Some("http://www.mockito.org".to_string()),pom.url);
|
||||
assert_eq!(2, pom.properties.len());
|
||||
assert_eq!("17", pom.properties["maven.compiler.source"]);
|
||||
assert_eq!("21", pom.properties["maven.compiler.target"]);
|
||||
}
|
||||
|
|
@ -7,6 +7,12 @@
|
|||
<version>1.9.5</version>
|
||||
<name>Mockito</name>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>21</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<url>http://www.mockito.org</url>
|
||||
<description>Mock objects library for java</description>
|
||||
<licenses>
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
mod xml;
|
||||
mod pom;
|
||||
mod maven;
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
use undeepend::maven::pom_reader::get_pom;
|
||||
use undeepend::xml::dom_parser::get_document;
|
||||
|
||||
#[test]
|
||||
fn test_pom_parser() {
|
||||
let test_xml = include_str!("../pom/resources/pom.xml");
|
||||
let pom = get_pom(test_xml).expect("failed to get document");
|
||||
println!("{:?}", pom);
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@ use undeepend::xml::dom_parser::get_document;
|
|||
|
||||
#[test]
|
||||
fn test_dom_parser() {
|
||||
let test_xml = include_str!("../pom/resources/pom.xml");
|
||||
let test_xml = include_str!("../maven/resources/pom.xml");
|
||||
let doc = get_document(test_xml).expect("failed to get document");
|
||||
println!("{:?}",doc);
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue