normalize_surface_syntax/
traits.rs1use crate::ir::Program;
4
5#[derive(Debug, thiserror::Error)]
7pub enum ReadError {
8 #[error("parse error: {0}")]
9 Parse(String),
10
11 #[error("unsupported syntax: {0}")]
12 Unsupported(String),
13
14 #[error("expected {expected}, got {got}")]
15 UnexpectedNode { expected: String, got: String },
16}
17
18pub trait Reader: Send + Sync {
20 fn language(&self) -> &'static str;
22
23 fn extensions(&self) -> &'static [&'static str];
25
26 fn read(&self, source: &str) -> Result<Program, ReadError>;
28}
29
30pub trait Writer: Send + Sync {
32 fn language(&self) -> &'static str;
34
35 fn extension(&self) -> &'static str;
37
38 fn write(&self, program: &Program) -> String;
40}