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}