小编use*_*185的帖子

无法使用serde-xml-rs的可选元素解析XML

我有一个serde-annotated结构树,它成功解析了示例XML,包括这个片段:

<bmsg>
    <cmsg>
         <!-- ... -->
    <cmsg>
<bmsg>
Run Code Online (Sandbox Code Playgroud)

现在我正在使用大型示例XML文件进行测试,并且以下结构会失败,因为有时<cmsg>..</cmsg>会丢失.我使用以下方法对此进行反序列化:

#[derive(Serialize,Deserialize, Debug)]
struct A {  
    #[serde(rename="bmsg")]
    messages: B,                 // <====
}

#[derive(Serialize,Deserialize, Debug)]
struct B {  // bmsg
    #[serde(rename="cmsg")]
    list: Vec<C>,
}
Run Code Online (Sandbox Code Playgroud)

这导致第二个结构中出错:

panicked at 'called `Result::unwrap()` on an `Err` value: missing field `cmsg`
Run Code Online (Sandbox Code Playgroud)

我改变了第一个结构,Vec<>因此它可以处理一个可选元素:

#[derive(Serialize,Deserialize, Debug)]
struct A {  
    #[serde(rename="bmsg")]
    messages: Vec<B>,            // <====
}

#[derive(Serialize,Deserialize, Debug)]
struct B {  // bmsg
    #[serde(rename="cmsg")]
    list: Vec<C>,
}
Run Code Online (Sandbox Code Playgroud)

但是,塞尔德继续给出同样的错误.我也试过Option<>,但没有到达任何地方.

最令我困惑的是,我Vec<>到处都使用,从不遇到这个问题.

xml rust serde

5
推荐指数
1
解决办法
425
查看次数

如何在Vec之前添加切片

我期待有一种Vec::insert_slice(index, slice)方法— String::insert_str()确实存在字符串()的解决方案。

我知道Vec::insert(),但是一次只插入一个元素,而不是切片。或者,当前置切片为一个切片时,Vec可以附加一个切片,但这不能一概而论。惯用的解决方案可能使用Vec::splice(),但如示例中那样使用迭代器会让我抓狂。

其次,似乎从文档中排除了前置的整个概念。没有任何提及。我会很感激关于原因的评论。注意,Vec::swap_remove()确实存在相对模糊的方法。

我的典型用例由索引字节字符串组成。

rust

5
推荐指数
1
解决办法
2518
查看次数

令人费解的Uncaught TypeError:在非对象上调用Object.keys

我有这个代码:

if(typeof x == 'object')
    return "{"+Object.keys(x)+"}";
Run Code Online (Sandbox Code Playgroud)

它导致(Chrome):

Uncaught TypeError: Object.keys called on non-object 
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里发生了什么?顺便说一下:Firefox也是如此.

ps:不知道对象是什么.Firefox调试失败了我.

javascript

3
推荐指数
1
解决办法
2274
查看次数

如何在Rust中将字节格式化为2位十六进制字符串

通常一个人要打印一个字节为2个十六进制数字,例如10应该给0x0a。在Rust中,可能会使用println!("{:#02x}", 10),但是它给出了0xa

我尝试过的事情列表(使用std::fmt和中的信息fmt::LowerHex以及一些StackOverflow问题):

println!("{:#02x}", 10);
println!("{:#0x}", 10);
println!("{:#x}", 10);
println!("{:#x?}", 10);
println!("{:#0x?}", 10);
println!("{:#02x?}", 10);
Run Code Online (Sandbox Code Playgroud)

全部输出0xa,而不是期望的行为0x0A


该问题已被编辑(消除了相关的情绪),随后被标记为其他问题的重复。但是其他答案不能解决为什么上面的列表不起作用。在#意想不到的输出(格式选项的结果0xa),尤其是02,出人意料的是,已经完全没有作用!没有其他问题对此#特别关注。

string-formatting rust

2
推荐指数
2
解决办法
469
查看次数

标签 统计

rust ×3

javascript ×1

serde ×1

string-formatting ×1

xml ×1