Skip to main content

use_media/
lib.rs

1#![forbid(unsafe_code)]
2//! Thin facade for the `use-media` workspace.
3//!
4//! The crate reexports the focused media crates directly so consumers can opt
5//! into one dependency while still using the smaller APIs.
6//!
7//! # Examples
8//!
9//! ```rust
10//! use use_media::*;
11//!
12//! let dimensions = Dimensions::new(1920, 1080).unwrap();
13//! let aspect = AspectRatio::new(1920, 1080).unwrap();
14//! let mime = parse_media_type("video/mp4").unwrap();
15//!
16//! assert_eq!(classify_resolution(1920, 1080).unwrap(), ResolutionClass::FullHd);
17//! assert_eq!(aspect.label(), "16:9");
18//! assert_eq!(mime.kind(), MediaKind::Video);
19//! assert_eq!(dimensions.area(), 2_073_600);
20//! ```
21
22pub use use_aspect_ratio;
23pub use use_aspect_ratio::*;
24pub use use_bitrate;
25pub use use_bitrate::*;
26pub use use_dimensions;
27pub use use_dimensions::*;
28pub use use_frame_rate;
29pub use use_frame_rate::*;
30pub use use_image;
31pub use use_image::aspect_ratio as image_aspect_ratio;
32pub use use_image::fit_within as fit_image_within;
33pub use use_image::is_image_mime as is_known_image_mime;
34pub use use_image::{
35    ImageAspectRatio, ImageFormat, ImageKind, ImageMetadata, ImageOrientation, ImageSize,
36    aspect_ratio_f64, cover_size, detect_image_format_from_bytes,
37    detect_image_format_from_extension, detect_image_format_from_mime, extension_from_filename,
38    image_extension, image_kind, image_mime_type, is_image_extension, is_raster_image,
39    is_vector_image, is_web_image_format, normalize_extension, orientation, scale_to_height,
40    scale_to_width, supports_animation, supports_transparency,
41};
42pub use use_media_duration;
43pub use use_media_duration::*;
44pub use use_media_timestamp;
45pub use use_media_timestamp::*;
46pub use use_media_type;
47pub use use_media_type::*;
48pub use use_resolution;
49pub use use_resolution::*;
50pub use use_svg;
51pub use use_svg::*;
52
53#[cfg(test)]
54mod tests {
55    use super::{
56        AspectRatio, Dimensions, FrameRate, ImageFormat, ImageSize, MediaKind, ResolutionClass,
57        SvgPath, build_svg_icon, classify_resolution, detect_image_format_from_extension,
58        extract_path_data, fit_image_within, parse_media_type, parse_view_box,
59    };
60
61    #[test]
62    fn facade_reexports_workspace_apis() {
63        let dimensions = Dimensions::new(1920, 1080).unwrap();
64        let aspect = AspectRatio::new(1920, 1080).unwrap();
65        let rate = FrameRate::new(24.0).unwrap();
66        let mime = parse_media_type("video/mp4").unwrap();
67        let icon = build_svg_icon(
68            parse_view_box("0 0 24 24").unwrap(),
69            &[SvgPath::new("M0 0h24v24H0z")],
70        );
71
72        assert_eq!(
73            classify_resolution(1920, 1080).unwrap(),
74            ResolutionClass::FullHd
75        );
76        assert_eq!(aspect.label(), "16:9");
77        assert_eq!(mime.kind(), MediaKind::Video);
78        assert_eq!(dimensions.area(), 2_073_600);
79        assert_eq!(detect_image_format_from_extension(".png"), ImageFormat::Png);
80        assert_eq!(
81            fit_image_within(ImageSize::new(800, 600), ImageSize::new(300, 300)),
82            ImageSize::new(300, 225)
83        );
84        assert!((rate.frame_duration_seconds() - (1.0 / 24.0)).abs() < 1.0e-12);
85        assert_eq!(extract_path_data(&icon), vec!["M0 0h24v24H0z".to_string()]);
86    }
87}