diff --git a/nixide/src/expr/values/attrs.rs b/nixide/src/expr/values/attrs.rs index 8008bf7..4baacd0 100644 --- a/nixide/src/expr/values/attrs.rs +++ b/nixide/src/expr/values/attrs.rs @@ -4,16 +4,16 @@ use std::ptr::{self, NonNull}; use std::rc::Rc; use super::{NixThunk, NixValue, Value}; +use crate::NixError; use crate::errors::{ErrorContext, NixideError}; use crate::stdext::{AsCPtr, CCharPtrExt}; use crate::sys; use crate::util::wrappers::AsInnerPtr; use crate::util::{panic_issue_call_failed, wrap}; -use crate::{EvalState, NixError}; pub struct NixAttrs { inner: NonNull, - state: Rc>, + state: Rc>>, len: u32, } @@ -61,7 +61,7 @@ impl NixValue for NixAttrs { sys::ValueType_NIX_TYPE_ATTRS } - fn from(inner: NonNull, state: Rc>) -> Self { + fn from(inner: NonNull, state: Rc>>) -> Self { let len = wrap::nix_fn!(|ctx: &ErrorContext| unsafe { sys::nix_get_attrs_size(ctx.as_ptr(), inner.as_ptr()) }) @@ -88,7 +88,7 @@ impl NixAttrs { sys::nix_get_attr_byidx( ctx.as_ptr(), self.as_ptr(), - self.state.borrow().as_ptr(), + self.state.borrow_mut().as_ptr(), index, name_ptr, ) @@ -115,7 +115,7 @@ impl NixAttrs { sys::nix_get_attr_byidx_lazy( ctx.as_ptr(), self.as_ptr(), - self.state.borrow().as_ptr(), + self.state.borrow_mut().as_ptr(), index, name_ptr, ) @@ -140,7 +140,7 @@ impl NixAttrs { sys::nix_get_attr_name_byidx( ctx.as_ptr(), self.as_ptr(), - self.state.borrow().as_ptr(), + self.state.borrow_mut().as_ptr(), index, ) }) @@ -161,7 +161,7 @@ impl NixAttrs { sys::nix_get_attr_byname( ctx.as_ptr(), self.as_ptr(), - self.state.borrow().as_ptr(), + self.state.borrow_mut().as_ptr(), name.as_ref() .into_c_ptr() .unwrap_or_else(|err| panic_issue_call_failed!("{}", err)), @@ -187,7 +187,7 @@ impl NixAttrs { sys::nix_get_attr_byname_lazy( ctx.as_ptr(), self.as_ptr(), - self.state.borrow().as_ptr(), + self.state.borrow_mut().as_ptr(), name.as_ref() .into_c_ptr() .unwrap_or_else(|err| panic_issue_call_failed!("{}", err)), diff --git a/nixide/src/expr/values/bool.rs b/nixide/src/expr/values/bool.rs index d604c94..01f5718 100644 --- a/nixide/src/expr/values/bool.rs +++ b/nixide/src/expr/values/bool.rs @@ -5,14 +5,14 @@ use std::rc::Rc; use super::NixValue; use crate::errors::ErrorContext; +use crate::sys; use crate::util::panic_issue_call_failed; use crate::util::wrap; use crate::util::wrappers::AsInnerPtr; -use crate::{EvalState, sys}; pub struct NixBool { inner: NonNull, - state: Rc>, + state: Rc>>, value: bool, } @@ -60,7 +60,7 @@ impl NixValue for NixBool { sys::ValueType_NIX_TYPE_BOOL } - fn from(inner: NonNull, state: Rc>) -> Self { + fn from(inner: NonNull, state: Rc>>) -> Self { let value = wrap::nix_fn!(|ctx: &ErrorContext| unsafe { sys::nix_get_bool(ctx.as_ptr(), inner.as_ptr()) }) diff --git a/nixide/src/expr/values/float.rs b/nixide/src/expr/values/float.rs index 1187821..b47569b 100644 --- a/nixide/src/expr/values/float.rs +++ b/nixide/src/expr/values/float.rs @@ -5,13 +5,13 @@ use std::rc::Rc; use super::NixValue; use crate::errors::ErrorContext; +use crate::sys; use crate::util::wrappers::AsInnerPtr; use crate::util::{panic_issue_call_failed, wrap}; -use crate::{EvalState, sys}; pub struct NixFloat { inner: NonNull, - state: Rc>, + state: Rc>>, value: f64, } @@ -59,7 +59,7 @@ impl NixValue for NixFloat { sys::ValueType_NIX_TYPE_FLOAT } - fn from(inner: NonNull, state: Rc>) -> Self { + fn from(inner: NonNull, state: Rc>>) -> Self { let value = wrap::nix_fn!(|ctx: &ErrorContext| unsafe { sys::nix_get_float(ctx.as_ptr(), inner.as_ptr()) }) diff --git a/nixide/src/expr/values/function.rs b/nixide/src/expr/values/function.rs index 5cf15a2..98827b1 100644 --- a/nixide/src/expr/values/function.rs +++ b/nixide/src/expr/values/function.rs @@ -3,16 +3,16 @@ use std::fmt::{Debug, Display, Formatter, Result as FmtResult}; use std::ptr::NonNull; use std::rc::Rc; -use super::{NixThunk, NixValue, Value}; +use super::{NixValue, Value}; use crate::errors::ErrorContext; use crate::stdext::SliceExt; +use crate::sys; use crate::util::wrappers::AsInnerPtr; use crate::util::{panic_issue_call_failed, wrap}; -use crate::{EvalState, sys}; pub struct NixFunction { inner: NonNull, - state: Rc>, + state: Rc>>, value: i64, } @@ -60,7 +60,7 @@ impl NixValue for NixFunction { sys::ValueType_NIX_TYPE_FUNCTION } - fn from(inner: NonNull, state: Rc>) -> Self { + fn from(inner: NonNull, state: Rc>>) -> Self { let value = wrap::nix_fn!(|ctx: &ErrorContext| unsafe { sys::nix_get_int(ctx.as_ptr(), inner.as_ptr()) }) diff --git a/nixide/src/expr/values/int.rs b/nixide/src/expr/values/int.rs index eccd7ef..4ddd147 100644 --- a/nixide/src/expr/values/int.rs +++ b/nixide/src/expr/values/int.rs @@ -5,13 +5,13 @@ use std::rc::Rc; use super::NixValue; use crate::errors::ErrorContext; +use crate::sys; use crate::util::wrappers::AsInnerPtr; use crate::util::{panic_issue_call_failed, wrap}; -use crate::{EvalState, sys}; pub struct NixInt { inner: NonNull, - state: Rc>, + state: Rc>>, value: i64, } @@ -59,7 +59,7 @@ impl NixValue for NixInt { sys::ValueType_NIX_TYPE_INT } - fn from(inner: NonNull, state: Rc>) -> Self { + fn from(inner: NonNull, state: Rc>>) -> Self { let value = wrap::nix_fn!(|ctx: &ErrorContext| unsafe { sys::nix_get_int(ctx.as_ptr(), inner.as_ptr()) }) diff --git a/nixide/src/expr/values/list.rs b/nixide/src/expr/values/list.rs index c062a87..fb82bc7 100644 --- a/nixide/src/expr/values/list.rs +++ b/nixide/src/expr/values/list.rs @@ -5,14 +5,13 @@ use std::rc::Rc; use super::{NixThunk, NixValue, Value}; use crate::errors::ErrorContext; +use crate::sys; use crate::util::wrappers::AsInnerPtr; use crate::util::{panic_issue_call_failed, wrap}; -use crate::{EvalState, sys}; pub struct NixList { inner: NonNull, - state: Rc>, - value: i64, + state: Rc>>, } impl Drop for NixList { @@ -59,17 +58,8 @@ impl NixValue for NixList { sys::ValueType_NIX_TYPE_LIST } - fn from(inner: NonNull, state: Rc>) -> Self { - let value = wrap::nix_fn!(|ctx: &ErrorContext| unsafe { - sys::nix_get_int(ctx.as_ptr(), inner.as_ptr()) - }) - .unwrap_or_else(|err| panic_issue_call_failed!("{}", err)); - - Self { - inner, - state, - value, - } + fn from(inner: NonNull, state: Rc>>) -> Self { + Self { inner, state } } } diff --git a/nixide/src/expr/values/mod.rs b/nixide/src/expr/values/mod.rs index 27fd5f6..6b1f459 100644 --- a/nixide/src/expr/values/mod.rs +++ b/nixide/src/expr/values/mod.rs @@ -45,7 +45,7 @@ pub trait NixValue: Drop + Display + Debug + AsInnerPtr { fn type_id(&self) -> sys::ValueType; /// TODO - fn from(inner: NonNull, state: Rc>) -> Self; + fn from(inner: NonNull, state: Rc>>) -> Self; } /// A Nix value @@ -111,8 +111,18 @@ pub enum Value { // Failed(NixFailed), } -impl From<(NonNull, Rc>)> for Value { - fn from(value: (NonNull, Rc>)) -> Self { +impl + From<( + NonNull, + Rc>>, + )> for Value +{ + fn from( + value: ( + NonNull, + Rc>>, + ), + ) -> Self { let (inner, state) = value; wrap::nix_fn!(|ctx: &ErrorContext| unsafe { @@ -125,6 +135,7 @@ impl From<(NonNull, Rc>)> for Value { }) .unwrap_or_else(|err| panic_issue_call_failed!("{}", err)); + #[allow(non_upper_case_globals)] match type_id { ValueType_NIX_TYPE_THUNK => Value::Thunk(::from(inner, state)), ValueType_NIX_TYPE_INT => Value::Int(::from(inner, state)), diff --git a/nixide/src/expr/values/null.rs b/nixide/src/expr/values/null.rs index 7b92254..11440de 100644 --- a/nixide/src/expr/values/null.rs +++ b/nixide/src/expr/values/null.rs @@ -5,12 +5,12 @@ use std::rc::Rc; use super::NixValue; use crate::errors::ErrorContext; +use crate::sys; use crate::util::wrappers::AsInnerPtr; -use crate::{EvalState, sys}; pub struct NixNull { inner: NonNull, - state: Rc>, + state: Rc>>, } impl Drop for NixNull { @@ -57,7 +57,7 @@ impl NixValue for NixNull { sys::ValueType_NIX_TYPE_NULL } - fn from(inner: NonNull, state: Rc>) -> Self { + fn from(inner: NonNull, state: Rc>>) -> Self { Self { inner, state } } } diff --git a/nixide/src/expr/values/path.rs b/nixide/src/expr/values/path.rs index 9a7fdb2..b25dfa6 100644 --- a/nixide/src/expr/values/path.rs +++ b/nixide/src/expr/values/path.rs @@ -7,14 +7,14 @@ use std::rc::Rc; use super::NixValue; use crate::errors::ErrorContext; use crate::stdext::CCharPtrExt; +use crate::sys; use crate::util::panic_issue_call_failed; use crate::util::wrap; use crate::util::wrappers::AsInnerPtr; -use crate::{EvalState, sys}; pub struct NixPath { inner: NonNull, - state: Rc>, + state: Rc>>, value: PathBuf, } @@ -62,7 +62,7 @@ impl NixValue for NixPath { sys::ValueType_NIX_TYPE_PATH } - fn from(inner: NonNull, state: Rc>) -> Self { + fn from(inner: NonNull, state: Rc>>) -> Self { let value = wrap::nix_fn!(|ctx: &ErrorContext| unsafe { sys::nix_get_path_string(ctx.as_ptr(), inner.as_ptr()) }) diff --git a/nixide/src/expr/values/string.rs b/nixide/src/expr/values/string.rs index 9ee305a..93ec66d 100644 --- a/nixide/src/expr/values/string.rs +++ b/nixide/src/expr/values/string.rs @@ -6,14 +6,14 @@ use std::rc::Rc; use super::NixValue; use crate::errors::ErrorContext; +use crate::sys; use crate::util::panic_issue_call_failed; use crate::util::wrap; use crate::util::wrappers::AsInnerPtr; -use crate::{EvalState, sys}; pub struct NixString { inner: NonNull, - state: Rc>, + state: Rc>>, value: String, } @@ -61,7 +61,7 @@ impl NixValue for NixString { sys::ValueType_NIX_TYPE_STRING } - fn from(inner: NonNull, state: Rc>) -> Self { + fn from(inner: NonNull, state: Rc>>) -> Self { let value = wrap::nix_string_callback!( |callback, userdata: *mut __UserData, ctx: &ErrorContext| unsafe { sys::nix_get_string( diff --git a/nixide/src/expr/values/thunk.rs b/nixide/src/expr/values/thunk.rs index 5fbe0f7..6327623 100644 --- a/nixide/src/expr/values/thunk.rs +++ b/nixide/src/expr/values/thunk.rs @@ -4,7 +4,6 @@ use std::ptr::NonNull; use std::rc::Rc; use super::{NixValue, Value}; -use crate::EvalState; use crate::errors::ErrorContext; use crate::sys; use crate::util::wrappers::AsInnerPtr; @@ -12,7 +11,7 @@ use crate::util::{panic_issue_call_failed, wrap}; pub struct NixThunk { inner: NonNull, - state: Rc>, + state: Rc>>, } impl Drop for NixThunk { @@ -59,7 +58,7 @@ impl NixValue for NixThunk { sys::ValueType_NIX_TYPE_THUNK } - fn from(inner: NonNull, state: Rc>) -> Self { + fn from(inner: NonNull, state: Rc>>) -> Self { Self { inner, state } } }