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}