pub use crate::media_urn::{
MediaUrn, MediaUrnError,
MEDIA_VOID, MEDIA_STRING, MEDIA_INTEGER, MEDIA_NUMBER, MEDIA_BOOLEAN, MEDIA_OBJECT,
MEDIA_STRING_ARRAY, MEDIA_INTEGER_ARRAY, MEDIA_NUMBER_ARRAY, MEDIA_BOOLEAN_ARRAY, MEDIA_OBJECT_ARRAY,
MEDIA_BINARY, MEDIA_FILE_PATH, MEDIA_FILE_PATH_ARRAY,
};
pub use crate::media_spec::{
SCHEMA_BASE,
PROFILE_STR, PROFILE_INT, PROFILE_NUM, PROFILE_BOOL, PROFILE_OBJ,
PROFILE_STR_ARRAY, PROFILE_INT_ARRAY, PROFILE_NUM_ARRAY, PROFILE_BOOL_ARRAY, PROFILE_OBJ_ARRAY,
PROFILE_VOID,
};
pub use crate::media_spec::{
MediaSpec, MediaSpecDef, MediaSpecDefObject, MediaSpecError,
ResolvedMediaSpec, resolve_media_urn, is_builtin_media_urn,
};
use std::collections::HashMap;
pub fn string_spec() -> ResolvedMediaSpec {
resolve_media_urn(MEDIA_STRING, &HashMap::new()).unwrap()
}
pub fn integer_spec() -> ResolvedMediaSpec {
resolve_media_urn(MEDIA_INTEGER, &HashMap::new()).unwrap()
}
pub fn number_spec() -> ResolvedMediaSpec {
resolve_media_urn(MEDIA_NUMBER, &HashMap::new()).unwrap()
}
pub fn boolean_spec() -> ResolvedMediaSpec {
resolve_media_urn(MEDIA_BOOLEAN, &HashMap::new()).unwrap()
}
pub fn json_object_spec() -> ResolvedMediaSpec {
resolve_media_urn(MEDIA_OBJECT, &HashMap::new()).unwrap()
}
pub fn octet_stream_spec() -> ResolvedMediaSpec {
resolve_media_urn(MEDIA_BINARY, &HashMap::new()).unwrap()
}
pub fn string_array_spec() -> ResolvedMediaSpec {
resolve_media_urn(MEDIA_STRING_ARRAY, &HashMap::new()).unwrap()
}
pub fn integer_array_spec() -> ResolvedMediaSpec {
resolve_media_urn(MEDIA_INTEGER_ARRAY, &HashMap::new()).unwrap()
}
pub fn number_array_spec() -> ResolvedMediaSpec {
resolve_media_urn(MEDIA_NUMBER_ARRAY, &HashMap::new()).unwrap()
}
pub fn boolean_array_spec() -> ResolvedMediaSpec {
resolve_media_urn(MEDIA_BOOLEAN_ARRAY, &HashMap::new()).unwrap()
}
pub fn json_object_array_spec() -> ResolvedMediaSpec {
resolve_media_urn(MEDIA_OBJECT_ARRAY, &HashMap::new()).unwrap()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_string_spec() {
let spec = string_spec();
assert_eq!(spec.media_urn, MEDIA_STRING);
assert_eq!(spec.media_type, "text/plain");
assert_eq!(spec.profile_uri, Some(PROFILE_STR.to_string()));
assert!(spec.is_text());
assert!(!spec.is_binary());
}
#[test]
fn test_integer_spec() {
let spec = integer_spec();
assert_eq!(spec.media_urn, MEDIA_INTEGER);
assert_eq!(spec.media_type, "text/plain");
assert_eq!(spec.profile_uri, Some(PROFILE_INT.to_string()));
}
#[test]
fn test_number_spec() {
let spec = number_spec();
assert_eq!(spec.media_urn, MEDIA_NUMBER);
assert_eq!(spec.media_type, "text/plain");
assert_eq!(spec.profile_uri, Some(PROFILE_NUM.to_string()));
}
#[test]
fn test_boolean_spec() {
let spec = boolean_spec();
assert_eq!(spec.media_urn, MEDIA_BOOLEAN);
assert_eq!(spec.media_type, "text/plain");
assert_eq!(spec.profile_uri, Some(PROFILE_BOOL.to_string()));
}
#[test]
fn test_json_object_spec() {
let spec = json_object_spec();
assert_eq!(spec.media_urn, MEDIA_OBJECT);
assert_eq!(spec.media_type, "application/json");
assert!(spec.is_json());
assert!(!spec.is_binary());
}
#[test]
fn test_octet_stream_spec() {
let spec = octet_stream_spec();
assert_eq!(spec.media_urn, MEDIA_BINARY);
assert_eq!(spec.media_type, "application/octet-stream");
assert!(spec.is_binary());
assert!(!spec.is_json());
}
#[test]
fn test_array_specs() {
let str_array = string_array_spec();
assert!(!str_array.is_json()); assert!(str_array.is_text()); assert_eq!(str_array.profile_uri, Some(PROFILE_STR_ARRAY.to_string()));
let int_array = integer_array_spec();
assert!(!int_array.is_json()); assert!(int_array.is_text());
let num_array = number_array_spec();
assert!(!num_array.is_json()); assert!(num_array.is_text());
let bool_array = boolean_array_spec();
assert!(!bool_array.is_json()); assert!(bool_array.is_text());
let obj_array = json_object_array_spec();
assert!(obj_array.is_json()); assert!(obj_array.is_text()); }
#[test]
fn test_media_urn_constants() {
assert!(MEDIA_STRING.starts_with("media:"));
assert!(MEDIA_INTEGER.starts_with("media:"));
assert!(MEDIA_OBJECT.starts_with("media:"));
assert!(MEDIA_BINARY.starts_with("media:"));
}
#[test]
fn test_profile_constants() {
assert!(PROFILE_STR.starts_with("https://capns.org/schema/"));
assert!(PROFILE_OBJ.starts_with("https://capns.org/schema/"));
}
}