来自serde_json箱子的Value :: into方法有什么作用?

问题描述 投票:1回答:1

这段代码调用val.into()函数,其中val是一个serde_json::Value枚举,但我在Rust文档中找不到任何into函数的描述。

pub fn parse(&self, s: &str) -> Result<RpcObject, ReadError> {
    let val = serde_json::from_str::<Value>(&s)?;
    if !val.is_object() {
        Err(ReadError::NotObject)
    } else {
        Ok(val.into())
    }
}
rust serde
1个回答
2
投票

Intosingle method into的特质。 Into适用于实现From的每种类型:

impl<T, U> Into<U> for T
where
    U: From<T>, 

serde_json::Value实现了许多不同版本的From

impl From<i8> for Value
impl From<i16> for Value
impl From<i32> for Value
impl From<i64> for Value
impl From<isize> for Value
impl From<u8> for Value
impl From<u16> for Value
impl From<u32> for Value
impl From<u64> for Value
impl From<usize> for Value
impl From<f32> for Value
impl From<f64> for Value
impl From<bool> for Value
impl From<String> for Value
impl<'a> From<&'a str> for Value
impl<'a> From<Cow<'a, str>> for Value
impl From<Map<String, Value>> for Value
impl<T: Into<Value>> From<Vec<T>> for Value
impl<'a, T: Clone + Into<Value>> From<&'a [T]> for Value

这两个特征用于提供不会失败的类型之间的转换。特征TryFromTryInto允许从Rust 1.34开始的错误转换。

也可以看看:


一个精明的读者会注意到我上面显示的实际上允许你转换为serde_json::Value。从技术上讲,原始代码从RpcObject转换为Value。在代码中的某处有impl From<serde_json::Value> for RpcObject,但由于没有提供该实现,我无法链接到任何有用的文档,但模式是相同的。

© www.soinside.com 2019 - 2024. All rights reserved.