use soap_server::{WsdlError, WsdlLoader};
pub struct EmbeddedWsdlLoader;
impl WsdlLoader for EmbeddedWsdlLoader {
fn load(&self, location: &str) -> Result<Vec<u8>, WsdlError> {
let filename = location.rsplit('/').next().unwrap_or(location);
match filename {
"devicemgmt.wsdl" => Ok(include_bytes!("../wsdl/devicemgmt.wsdl").to_vec()),
"media.wsdl" => Ok(include_bytes!("../wsdl/media.wsdl").to_vec()),
"ptz.wsdl" => Ok(include_bytes!("../wsdl/ptz.wsdl").to_vec()),
"imaging.wsdl" => Ok(include_bytes!("../wsdl/imaging.wsdl").to_vec()),
"events.wsdl" | "event.wsdl" => Ok(include_bytes!("../wsdl/events.wsdl").to_vec()),
"onvif.xsd" => Ok(include_bytes!("../wsdl/onvif.xsd").to_vec()),
"common.xsd" => Ok(include_bytes!("../wsdl/common.xsd").to_vec()),
"xmlmime" | "xmlmime.xsd" => Ok(include_bytes!("../wsdl/xmlmime.xsd").to_vec()),
"soap-envelope" | "soap-envelope.xsd" => {
Ok(include_bytes!("../wsdl/soap-envelope.xsd").to_vec())
}
"b-2.xsd" => Ok(include_bytes!("../wsdl/wsn-b2.xsd").to_vec()),
"bw-2.wsdl" => Ok(include_bytes!("../wsdl/wsn-bw2.wsdl").to_vec()),
"rw-2.wsdl" => Ok(include_bytes!("../wsdl/wsrf-rw2.wsdl").to_vec()),
"ws-addr.xsd" => Ok(include_bytes!("../wsdl/ws-addr.xsd").to_vec()),
"t-1.xsd" => Ok(include_bytes!("../wsdl/wsn-t1.xsd").to_vec()),
"include" | "xop-include.xsd" => Ok(include_bytes!("../wsdl/xop-include.xsd").to_vec()),
other => Err(WsdlError::MalformedXml(format!(
"Unknown WSDL/XSD: {other}"
))),
}
}
}