ploidy_codegen_rust/
graph.rs

1use std::ops::Deref;
2
3use ploidy_core::{
4    codegen::UniqueNames,
5    ir::{IrGraph, View},
6};
7
8use super::naming::CodegenIdentScope;
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 unique = UniqueNames::new();
17        let mut scope = CodegenIdentScope::new(&unique);
18        for mut view in graph.schemas() {
19            let ident = scope.uniquify(view.name());
20            view.extensions_mut().insert(ident);
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}