microcad_lang/src_ref/
src_referrer.rs

1// Copyright © 2025 The µcad authors <info@ucad.xyz>
2// SPDX-License-Identifier: AGPL-3.0-or-later
3
4//! Trait to access source reference of an element
5
6use crate::src_ref::*;
7
8/// Elements holding a source code reference shall implement this trait
9pub trait SrcReferrer {
10    /// Return source code reference.
11    fn src_ref(&self) -> SrcRef;
12
13    /// Return source code hash.
14    fn source_hash(&self) -> u64 {
15        self.src_ref().source_hash()
16    }
17}
18
19/// We want to be able to use SrcRef directly in functions with `impl SrcReferrer` argument
20impl SrcReferrer for SrcRef {
21    fn src_ref(&self) -> SrcRef {
22        self.clone()
23    }
24}
25
26/// We want to be able to use type references as well.
27impl<T: SrcReferrer> SrcReferrer for &T {
28    fn src_ref(&self) -> SrcRef {
29        (*self).src_ref()
30    }
31}