difftreelog
fix derive names for full destruction
in: master
2 files changed
crates/jrsonnet-evaluator/src/evaluate/destructure.rsdiffbeforeafterboth445use crate::{5use crate::{6 error::{Error::*, Result},6 error::{Error::*, Result},7 evaluate, evaluate_method,7 evaluate, evaluate_method, evaluate_named,8 gc::GcHashMap,8 gc::GcHashMap,9 tb, throw,9 tb, throw,10 val::ThunkValue,10 val::ThunkValue,235 BindSpec::Field { into, value } => {235 BindSpec::Field { into, value } => {236 #[derive(Trace)]236 #[derive(Trace)]237 struct EvaluateThunkValue {237 struct EvaluateThunkValue {238 name: Option<IStr>,238 fctx: Pending<Context>,239 fctx: Pending<Context>,239 expr: LocExpr,240 expr: LocExpr,240 }241 }241 impl ThunkValue for EvaluateThunkValue {242 impl ThunkValue for EvaluateThunkValue {242 type Output = Val;243 type Output = Val;243 fn get(self: Box<Self>, s: State) -> Result<Self::Output> {244 fn get(self: Box<Self>, s: State) -> Result<Self::Output> {245 if let Some(name) = self.name {246 evaluate_named(s, self.fctx.unwrap(), &self.expr, name)247 } else {244 evaluate(s, self.fctx.unwrap(), &self.expr)248 evaluate(s, self.fctx.unwrap(), &self.expr)245 }249 }250 }246 }251 }247 // TODO: Generate some name, as destructure spec may be used with plain functions248 let data = Thunk::new(tb!(EvaluateThunkValue {252 let data = Thunk::new(tb!(EvaluateThunkValue {253 name: into.name(),249 fctx,254 fctx,250 expr: value.clone(),255 expr: value.clone(),251 }));256 }));crates/jrsonnet-parser/src/expr.rsdiffbeforeafterboth204 rest: Option<DestructRest>,204 rest: Option<DestructRest>,205 },205 },206}206}207impl Destruct {208 pub fn name(&self) -> Option<IStr> {209 match self {210 Self::Full(name) => Some(name.clone()),211 #[cfg(feature = "exp-destruct")]212 _ => None,213 }214 }215}207216208#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]217#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]209#[derive(Debug, Clone, PartialEq, Trace)]218#[derive(Debug, Clone, PartialEq, Trace)]