1use crate::{Comment, Mnemonic, Span, Word};
2
3#[allow(unused_imports)] use crate::{buffers::Buffers, GCode};
5
6pub trait Callbacks {
8 fn unknown_content(&mut self, _text: &str, _span: Span) {}
10
11 fn gcode_buffer_overflowed(
14 &mut self,
15 _mnemonic: Mnemonic,
16 _major_number: u32,
17 _minor_number: u32,
18 _arguments: &[Word],
19 _span: Span,
20 ) {
21 }
22
23 fn gcode_argument_buffer_overflowed(
29 &mut self,
30 _mnemonic: Mnemonic,
31 _major_number: u32,
32 _minor_number: u32,
33 _argument: Word,
34 ) {
35 }
36
37 fn comment_buffer_overflow(&mut self, _comment: Comment<'_>) {}
40
41 fn unexpected_line_number(&mut self, _line_number: f32, _span: Span) {}
43
44 fn argument_without_a_command(
47 &mut self,
48 _letter: char,
49 _value: f32,
50 _span: Span,
51 ) {
52 }
53
54 fn number_without_a_letter(&mut self, _value: &str, _span: Span) {}
56
57 fn letter_without_a_number(&mut self, _value: &str, _span: Span) {}
59}
60
61impl<'a, C: Callbacks + ?Sized> Callbacks for &'a mut C {
62 fn unknown_content(&mut self, text: &str, span: Span) {
63 (*self).unknown_content(text, span);
64 }
65
66 fn gcode_buffer_overflowed(
67 &mut self,
68 mnemonic: Mnemonic,
69 major_number: u32,
70 minor_number: u32,
71 arguments: &[Word],
72 span: Span,
73 ) {
74 (*self).gcode_buffer_overflowed(
75 mnemonic,
76 major_number,
77 minor_number,
78 arguments,
79 span,
80 );
81 }
82
83 fn gcode_argument_buffer_overflowed(
84 &mut self,
85 mnemonic: Mnemonic,
86 major_number: u32,
87 minor_number: u32,
88 argument: Word,
89 ) {
90 (*self).gcode_argument_buffer_overflowed(
91 mnemonic,
92 major_number,
93 minor_number,
94 argument,
95 );
96 }
97
98 fn comment_buffer_overflow(&mut self, comment: Comment<'_>) {
99 (*self).comment_buffer_overflow(comment);
100 }
101
102 fn unexpected_line_number(&mut self, line_number: f32, span: Span) {
103 (*self).unexpected_line_number(line_number, span);
104 }
105
106 fn argument_without_a_command(
107 &mut self,
108 letter: char,
109 value: f32,
110 span: Span,
111 ) {
112 (*self).argument_without_a_command(letter, value, span);
113 }
114
115 fn number_without_a_letter(&mut self, value: &str, span: Span) {
116 (*self).number_without_a_letter(value, span);
117 }
118
119 fn letter_without_a_number(&mut self, value: &str, span: Span) {
120 (*self).letter_without_a_number(value, span);
121 }
122}
123
124#[derive(Debug, Copy, Clone, PartialEq, Default)]
126pub struct Nop;
127
128impl Callbacks for Nop {}