3个版本
0.1.2 | 2023年1月15日 |
---|---|
0.1.1 | 2022年12月20日 |
0.1.0 | 2022年1月15日 |
#2060 在 解析器实现
24KB
332 行
clarion
一个库,通过启用简单的到和从Clarion格式的转换,简化了处理Clarion软件数据格式,包括将Clarion颜色格式转换为RGB格式,以及日期/时间转换为由time库使用/提供的格式。
Clarion日期/时间格式都是基于整数,在该库中表示为
Clarion颜色格式也是一个整数,表示为
还指定了一个标准错误格式,名为ClarionErr
,用于处理超出范围的转换和构造器错误(ClarionErr::ConversionOverflowed
和ClarionErr::OutOfRange
)。
用法
此库提供了四个主要的结构体,ClarionTime
、ClarionDate
、ClarionColor和
RgbColor
。
ClarionColor
和RgbColor
表示24位RGB颜色空间中的颜色,而ClarionTime/
ClarionDate
分别表示时间和日期值。可以使用构造函数new()
创建ClarionDate、
ClarionTime
和ClarionColor类型,而
RgbColor可以使用标准的结构体初始化语法创建
// Create a new ClarionTime value (16:34:00).
let c_time = clarion::ClarionTime::new(5964000);
// Create a new ClarionDate value (2022-01-05).
let c_date = clarion::ClarionDate::new(80727);
// Create a new ClarionColor value (white).
let c_color = clarion::ClarionColor::new(16777215)
ClarionDate
/ClarionTime
日期/时间类型可以使用from()
/try_from()
和/或into()
/try_into()
函数自由地转换为/从与time
兼容的格式。
// Convert `Date` into `ClarionDate` using `from()`.
let date = time::macros::date!(2022-01-05);
let c_date = clarion::ClarionDate::from(date);
assert_eq!(c_date.date(), 80727);
// Convert `ClarionDate` into `Date` using `try_from()`.
let c_date = clarion::ClarionDate::new(80727);
let date = time::Date::try_from(c_date)
.expect("Value did not represent a date between Date::MAX and Date::MIN.");
assert_eq!(date, time::macros::date!(2022-01-05));
// Convert `ClarionTime` into `Time` using `into()`.
let c_time = clarion::ClarionTime::new(5964000);
let time: time::Time = c_time.into();
assert_eq!(time, time::macros::time!(16:34:00))
转换是完全可逆的
let c_date = clarion::ClarionDate::new(80727);
let date: time::Date = c_date.try_into().unwrap();
let another_c_date: clarion::ClarionDate = date.into();
assert_eq!(another_c_date, c_date);
可以通过使用相应结构体的time()
或date()
函数,从ClarionTime
或ClarionDate
值中提取出原始的i32
值。
ClarionColor
/RgbColor
可以使用from()
和into()
函数在ClarionColor
和RgbColor
之间自由转换。
// Convert an RgbColor into a ClarionColor.
let color = clarion::RgbColor {red: 255, green: 128, blue: 64};
let c_color = clarion::ClarionColor::from(color);
assert_eq!(c_color.color(), 4227327);
// Convert a ClarionColor into an RgbColor.
let c_color = clarion::ClarionColor::new(4227327).unwrap();
let color = clarion::RgbColor::from(c_color);
let expected_color = clarion::RgbColor {red: 255, green: 128, blue: 64};
assert_eq!(color, expected_color);
可以使用color()
函数访问ClarionColor
值的整数值。
let c_color = clarion::ClarionColor::new(4259584).unwrap();
assert_eq!(c_color.color(), 4259584);
可以使用结构体的相应red
、green
或blue
成员访问RgbColor
值的底层u8
值。
let color = clarion::RgbColor { red: 128, green: 64, blue: 0 };
let (red, green, blue) = (color.red, color.green, color.blue);
assert_eq!((red, green, blue), (128, 64, 0));
许可证
该项目可以在以下许可证中选择之一。
任选其一。
除非您明确声明,否则您根据Apache-2.0许可证定义的、有意提交以包含在clarion中的任何贡献,都应按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~745KB
~13K SLoC