#![doc(html_root_url = "https://docs.rs/usvg/0.9.1")]
#![warn(missing_docs)]
#![warn(missing_debug_implementations)]
#![warn(missing_copy_implementations)]
macro_rules! try_opt {
($task:expr) => {
match $task {
Some(v) => v,
None => return,
}
};
}
macro_rules! try_opt_continue {
($task:expr) => {
match $task {
Some(v) => v,
None => continue,
}
};
}
macro_rules! try_opt_or {
($task:expr, $ret:expr) => {
match $task {
Some(v) => v,
None => return $ret,
}
};
}
macro_rules! try_opt_warn {
($task:expr, $msg:expr) => {
match $task {
Some(v) => v,
None => {
log::warn!($msg);
return;
}
}
};
($task:expr, $fmt:expr, $($arg:tt)*) => {
match $task {
Some(v) => v,
None => {
log::warn!($fmt, $($arg)*);
return;
}
}
};
}
macro_rules! try_opt_warn_or {
($task:expr, $ret:expr, $msg:expr) => {
match $task {
Some(v) => v,
None => {
log::warn!($msg);
return $ret;
}
}
};
($task:expr, $ret:expr, $fmt:expr, $($arg:tt)*) => {
match $task {
Some(v) => v,
None => {
log::warn!($fmt, $($arg)*);
return $ret;
}
}
};
}
macro_rules! impl_enum_default {
($name:ident, $def_value:ident) => {
impl Default for $name {
#[inline]
fn default() -> Self {
$name::$def_value
}
}
};
}
macro_rules! impl_enum_from_str {
($name:ident, $($string:pat => $result:expr),+) => {
impl crate::svgtree::EnumFromStr for $name {
fn enum_from_str(s: &str) -> Option<Self> {
match s {
$($string => Some($result)),+,
_ => None,
}
}
}
};
}
macro_rules! matches {
($expression:expr, $($pattern:tt)+) => {
match $expression {
$($pattern)+ => true,
_ => false
}
}
}
pub mod utils;
mod convert;
mod error;
mod geom;
mod options;
mod svgtree;
mod tree;
#[cfg(feature = "text")] mod fontdb;
mod short {
pub use svgtypes::LengthUnit as Unit;
}
pub use xmlwriter::Options as XmlOptions;
pub use xmlwriter::Indent as XmlIndent;
pub use crate::error::*;
pub use crate::geom::*;
pub use crate::options::*;
pub use crate::tree::*;
pub trait IsDefault: Default {
fn is_default(&self) -> bool;
}
impl<T: Default + PartialEq + Copy> IsDefault for T {
#[inline]
fn is_default(&self) -> bool {
*self == Self::default()
}
}
pub trait IsValidLength {
fn is_valid_length(&self) -> bool;
}
impl IsValidLength for f64 {
#[inline]
fn is_valid_length(&self) -> bool {
*self > 0.0
}
}
pub trait TransformFromBBox: Sized {
fn from_bbox(bbox: Rect) -> Self;
}
impl TransformFromBBox for tree::Transform {
#[inline]
fn from_bbox(bbox: Rect) -> Self {
Self::new(bbox.width(), 0.0, 0.0, bbox.height(), bbox.x(), bbox.y())
}
}