refactor(tvix/value): hide internal string representation
Wraps the string representation in an additional newtype struct with a private field in order to hide the representation from other modules. This is done in order to avoid accidental leakage of the internals outside of value::string. In fact, this caught a mistake in the compiler module which was directly constructing an internal variant. Change-Id: If4b627d3cff7ab9cd50ca1a3ac73245d4dcf7aef Reviewed-on: https://cl.tvl.fyi/c/depot/+/6147 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
parent
a0cbc78a83
commit
2422f2f224
2 changed files with 16 additions and 13 deletions
|
|
@ -5,11 +5,14 @@ use std::{borrow::Cow, fmt::Display};
|
|||
/// backing implementations.
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum NixString {
|
||||
enum StringRepr {
|
||||
Static(&'static str),
|
||||
Heap(String),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct NixString(StringRepr);
|
||||
|
||||
impl PartialEq for NixString {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
self.as_str() == other.as_str()
|
||||
|
|
@ -32,13 +35,13 @@ impl Ord for NixString {
|
|||
|
||||
impl From<&'static str> for NixString {
|
||||
fn from(s: &'static str) -> Self {
|
||||
NixString::Static(s)
|
||||
NixString(StringRepr::Static(s))
|
||||
}
|
||||
}
|
||||
|
||||
impl From<String> for NixString {
|
||||
fn from(s: String) -> Self {
|
||||
NixString::Heap(s)
|
||||
NixString(StringRepr::Heap(s))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -49,13 +52,13 @@ impl Hash for NixString {
|
|||
}
|
||||
|
||||
impl NixString {
|
||||
pub const NAME: Self = NixString::Static("name");
|
||||
pub const VALUE: Self = NixString::Static("value");
|
||||
pub const NAME: Self = NixString(StringRepr::Static("name"));
|
||||
pub const VALUE: Self = NixString(StringRepr::Static("value"));
|
||||
|
||||
pub fn as_str(&self) -> &str {
|
||||
match self {
|
||||
NixString::Static(s) => s,
|
||||
NixString::Heap(s) => s,
|
||||
match &self.0 {
|
||||
StringRepr::Static(s) => s,
|
||||
StringRepr::Heap(s) => s,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -82,7 +85,7 @@ impl NixString {
|
|||
pub fn concat(&self, other: &Self) -> Self {
|
||||
let mut s = self.as_str().to_owned();
|
||||
s.push_str(other.as_str());
|
||||
NixString::Heap(s)
|
||||
NixString(StringRepr::Heap(s))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue