fcmlib/
segment_bezier.rs

1use crate::encode::Encode;
2use crate::point::{read_point, Point};
3use nom::combinator::map;
4use nom::sequence::tuple;
5use nom::IResult;
6
7#[derive(Debug, Copy, Clone)]
8pub struct SegmentBezier {
9    pub control1: Point,
10    pub control2: Point,
11    pub end: Point,
12}
13
14pub(crate) fn read_segment_bezier(input: &[u8]) -> IResult<&[u8], SegmentBezier> {
15    map(
16        tuple((read_point, read_point, read_point)),
17        |(control1, control2, end)| SegmentBezier {
18            control1,
19            control2,
20            end,
21        },
22    )(input)
23}
24
25impl Encode for SegmentBezier {
26    fn encode(&self, buffer: &mut Vec<u8>) -> std::io::Result<()> {
27        self.control1.encode(buffer)?;
28        self.control2.encode(buffer)?;
29        self.end.encode(buffer)?;
30        Ok(())
31    }
32}