fyrox_impl/resource/curve/
mod.rs1use crate::{
24 asset::{io::ResourceIo, Resource, ResourceData, CURVE_RESOURCE_UUID},
25 core::{
26 io::FileLoadError, math::curve::Curve, reflect::prelude::*, uuid::Uuid,
27 visitor::prelude::*, TypeUuidProvider,
28 },
29};
30use std::error::Error;
31use std::{
32 fmt::{Display, Formatter},
33 path::Path,
34};
35
36pub mod loader;
37
38#[derive(Debug)]
40pub enum CurveResourceError {
41 Io(FileLoadError),
43
44 Visit(VisitError),
46}
47
48impl Display for CurveResourceError {
49 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
50 match self {
51 CurveResourceError::Io(v) => {
52 write!(f, "A file load error has occurred {v:?}")
53 }
54 CurveResourceError::Visit(v) => {
55 write!(
56 f,
57 "An error that may occur due to version incompatibilities. {v:?}"
58 )
59 }
60 }
61 }
62}
63
64impl From<FileLoadError> for CurveResourceError {
65 fn from(e: FileLoadError) -> Self {
66 Self::Io(e)
67 }
68}
69
70impl From<VisitError> for CurveResourceError {
71 fn from(e: VisitError) -> Self {
72 Self::Visit(e)
73 }
74}
75
76#[derive(Debug, Visit, Default, Reflect)]
78pub struct CurveResourceState {
79 pub curve: Curve,
81}
82
83impl ResourceData for CurveResourceState {
84 fn type_uuid(&self) -> Uuid {
85 <Self as TypeUuidProvider>::type_uuid()
86 }
87
88 fn save(&mut self, _path: &Path) -> Result<(), Box<dyn Error>> {
89 Err("Saving is not supported!".to_string().into())
91 }
92
93 fn can_be_saved(&self) -> bool {
94 false
95 }
96}
97
98impl TypeUuidProvider for CurveResourceState {
99 fn type_uuid() -> Uuid {
100 CURVE_RESOURCE_UUID
101 }
102}
103
104impl CurveResourceState {
105 pub async fn from_file(path: &Path, io: &dyn ResourceIo) -> Result<Self, CurveResourceError> {
107 let bytes = io.load_file(path).await?;
108 let mut visitor = Visitor::load_from_memory(&bytes)?;
109 let mut curve = Curve::default();
110 curve.visit("Curve", &mut visitor)?;
111 Ok(Self { curve })
112 }
113}
114
115pub type CurveResource = Resource<CurveResourceState>;