forked from extern/nushell
This commit extracts five new crates: - nu-source, which contains the core source-code handling logic in Nu, including Text, Span, and also the pretty.rs-based debug logic - nu-parser, which is the parser and expander logic - nu-protocol, which is the bulk of the types and basic conveniences used by plugins - nu-errors, which contains ShellError, ParseError and error handling conveniences - nu-textview, which is the textview plugin extracted into a crate One of the major consequences of this refactor is that it's no longer possible to `impl X for Spanned<Y>` outside of the `nu-source` crate, so a lot of types became more concrete (Value became a concrete type instead of Spanned<Value>, for example). This also turned a number of inherent methods in the main nu crate into plain functions (impl Value {} became a bunch of functions in the `value` namespace in `crate::data::value`).
24 lines
663 B
Rust
24 lines
663 B
Rust
use num_bigint::BigInt;
|
|
use num_traits::cast::FromPrimitive;
|
|
use num_traits::cast::ToPrimitive;
|
|
|
|
pub fn serialize<S>(big_int: &BigInt, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: serde::Serializer,
|
|
{
|
|
serde::Serialize::serialize(
|
|
&big_int
|
|
.to_i64()
|
|
.ok_or(serde::ser::Error::custom("expected a i64-sized bignum"))?,
|
|
serializer,
|
|
)
|
|
}
|
|
|
|
pub fn deserialize<'de, D>(deserializer: D) -> Result<BigInt, D::Error>
|
|
where
|
|
D: serde::Deserializer<'de>,
|
|
{
|
|
let x: i64 = serde::Deserialize::deserialize(deserializer)?;
|
|
Ok(BigInt::from_i64(x).ok_or(serde::de::Error::custom("expected a i64-sized bignum"))?)
|
|
}
|