1use crate::version::PlatformVersion;
2
3pub mod error;
4pub mod version;
5
6pub trait DefaultForPlatformVersion: Sized {
7 type Error;
9
10 fn default_for_platform_version(
12 platform_version: &PlatformVersion,
13 ) -> Result<Self, Self::Error>;
14}
15
16pub trait TryFromPlatformVersioned<T>: Sized {
17 type Error;
19
20 fn try_from_platform_versioned(
22 value: T,
23 platform_version: &PlatformVersion,
24 ) -> Result<Self, Self::Error>;
25}
26
27pub trait TryIntoPlatformVersioned<T>: Sized {
28 type Error;
30
31 fn try_into_platform_versioned(
33 self,
34 platform_version: &PlatformVersion,
35 ) -> Result<T, Self::Error>;
36}
37
38impl<T, U> TryIntoPlatformVersioned<U> for T
40where
41 U: TryFromPlatformVersioned<T>,
42{
43 type Error = U::Error;
44
45 #[inline]
46 fn try_into_platform_versioned(
47 self,
48 platform_version: &PlatformVersion,
49 ) -> Result<U, U::Error> {
50 U::try_from_platform_versioned(self, platform_version)
51 }
52}
53
54pub trait FromPlatformVersioned<T>: Sized {
58 fn from_platform_versioned(value: T, platform_version: &PlatformVersion) -> Self;
60}
61
62pub trait IntoPlatformVersioned<T>: Sized {
66 fn into_platform_versioned(self, platform_version: &PlatformVersion) -> T;
68}
69
70impl<T, U> IntoPlatformVersioned<U> for T
72where
73 U: FromPlatformVersioned<T>,
74{
75 #[inline]
76 fn into_platform_versioned(self, platform_version: &PlatformVersion) -> U {
77 U::from_platform_versioned(self, platform_version)
78 }
79}