ploidy_codegen_rust/
graph.rs

1use std::ops::Deref;
2
3use ploidy_core::{
4    codegen::UniqueNameSpace,
5    ir::{IrGraph, View},
6};
7
8use super::naming::SchemaIdent;
9
10/// Decorates an [`IrGraph`] with Rust-specific information.
11#[derive(Debug)]
12pub struct CodegenGraph<'a>(IrGraph<'a>);
13
14impl<'a> CodegenGraph<'a> {
15    pub fn new(graph: IrGraph<'a>) -> Self {
16        let mut space = UniqueNameSpace::new();
17        for mut view in graph.schemas() {
18            let name = view.name();
19            view.extensions_mut()
20                .insert(SchemaIdent(space.uniquify(name).into_owned()));
21        }
22        Self(graph)
23    }
24}
25
26impl<'a> Deref for CodegenGraph<'a> {
27    type Target = IrGraph<'a>;
28
29    fn deref(&self) -> &Self::Target {
30        &self.0
31    }
32}