Skip to main content

glycin_utils/
editing.rs

1use std::fmt::{Debug, Display};
2use std::sync::Arc;
3
4use crate::DimensionTooLargerError;
5
6mod change_memory_format;
7mod clip;
8mod operations;
9mod orientation;
10
11pub use change_memory_format::change_memory_format;
12pub use clip::clip;
13use glycin_common::{ExtendedMemoryFormat, OperationId};
14use gufo_common::math::MathError;
15use gufo_common::read::ReadError;
16pub use operations::apply_operations;
17pub use orientation::change_orientation;
18
19#[derive(Debug, Clone)]
20pub struct EditingFrame {
21    pub width: u32,
22    pub height: u32,
23    /// Line stride
24    pub stride: u32,
25    pub memory_format: ExtendedMemoryFormat,
26}
27
28#[derive(Debug, thiserror::Error, Clone)]
29#[non_exhaustive]
30pub enum Error {
31    #[error("IO Error: {0}")]
32    Io(#[from] Arc<std::io::Error>),
33    #[error("Math Error: {0}")]
34    Math(#[from] MathError),
35    #[error("Read Error: {0}")]
36    ReadError(#[from] ReadError),
37    #[error("{0}")]
38    DimensionTooLargerError(#[from] DimensionTooLargerError),
39    #[error("Zerocopy: {0}")]
40    ZerocopyConvertError(String),
41    #[error("Unknown operation: {0:?}")]
42    UnknownOperation(OperationId),
43    #[error("Failed to build rayon thread pool: {0}")]
44    ThreadPoolBuildError(#[from] Arc<rayon::ThreadPoolBuildError>),
45}
46
47impl<A: Display, S: Display, V: Display> From<zerocopy::ConvertError<A, S, V>> for Error {
48    fn from(value: zerocopy::ConvertError<A, S, V>) -> Self {
49        Self::ZerocopyConvertError(value.to_string())
50    }
51}
52
53impl From<std::io::Error> for Error {
54    fn from(value: std::io::Error) -> Self {
55        Arc::new(value).into()
56    }
57}