pub fn get_sdk_from_url(url: &str, host: &str) -> Result<String, &'static str> {
if url.ends_with("sdk.js") {
let sdk = include_str!("../release/sdk.js").trim();
return Ok(dynamize_sdk(sdk, host));
}
let Some((_, part)) = url.rsplit_once("edgee.v") else {
return Err("Failed to read the JS SDK file");
};
let Some(part) = part.strip_suffix(".js") else {
return Err("Failed to read the JS SDK file");
};
let content = match part {
"1.1.0" => include_str!("../release/edgee.v1.1.0.js"),
"1.2.0" => include_str!("../release/edgee.v1.2.0.js"),
"1.2.1" => include_str!("../release/edgee.v1.2.1.js"),
_ => return Err("Failed to read the JS SDK file"),
};
Ok(dynamize_sdk(content, host))
}
fn dynamize_sdk(sdk: &str, host: &str) -> String {
let new_path = edgee_path::generate(host);
sdk.replace("/_edgee/event", new_path.as_str())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn retrieves_sdk_content_for_valid_url() {
let url = "/sdk.js";
let host = "example.com";
let result = get_sdk_from_url(url, host);
assert!(result.is_ok());
assert!(result.unwrap().contains("/_edgee/side"));
}
#[test]
fn retrieves_versioned_sdk_content() {
let url = "/edgee.v1.1.0.js";
let host = "example.com";
let result = get_sdk_from_url(url, host);
assert!(result.is_ok());
assert!(result.unwrap().contains("/_edgee/side"));
}
#[test]
fn returns_error_for_invalid_url_format() {
let url = "/invalid.js";
let host = "example.com";
let result = get_sdk_from_url(url, host);
assert!(result.is_err());
assert_eq!(result.unwrap_err(), "Failed to read the JS SDK file");
}
#[test]
fn returns_error_for_unsupported_version() {
let url = "/edgee.v2.0.0.js";
let host = "example.com";
let result = get_sdk_from_url(url, host);
assert!(result.is_err());
assert_eq!(result.unwrap_err(), "Failed to read the JS SDK file");
}
}