use std::fmt::Debug;
use thiserror::Error;
use crate::holder::likes::color_like::ColorLike;
use crate::holder::stroke::Stroke;
use crate::point::Point;
#[derive(Error, Debug)]
pub enum TransformError {
#[error("`{0}` is not implemented for {1}")]
NotImplemented(&'static str, String),
#[error("No item with id `{0}`")]
NoItem(String),
}
pub trait TransformLogic: Debug {
fn transform(&mut self, transformation: &Transform) -> Result<(), TransformError>;
#[allow(unused_variables)]
fn transform_by_id(
&mut self,
id: impl Into<String>,
transformation: &Transform,
) -> Result<(), TransformError> {
Err(TransformError::NotImplemented(
"transform_by_id",
format!("{self:?}"),
))
}
}
#[derive(Debug, Clone)]
pub enum Transform {
Visibility(bool),
Move(Point),
Position(Point),
Color(Option<ColorLike>),
Stroke(Option<Stroke>),
Scale(Point),
Rotate(f64),
}