Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2020-05-29T15:46:46+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Rust: comment deserialiser avec serde un vec de struct assez simples, message #2214752020-05-29T15:46:46+02:00buffalo974/@buffalo974https://zestedesavoir.com/forums/sujet/14138/rust-comment-deserialiser-avec-serde-un-vec-de-struct-assez-simples/?page=1#p221475<p>Salut,
voici ma structure</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-rust"><span class="hljs-meta">#[derive(Debug, PartialEq, Serialize, Deserialize)]</span>
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">Record</span></span> {
score_value: <span class="hljs-built_in">u32</span>,
player_name: <span class="hljs-built_in">String</span>, <span class="hljs-comment">// does not implement `Copy`</span>
timestamp_fake: <span class="hljs-built_in">u32</span>,
}
</code></pre></div>
<p>des "instances":</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span></div><pre><code class="hljs language-yaml"><span class="hljs-string">let</span> <span class="hljs-string">yesterdayscore</span> <span class="hljs-string">=</span> <span class="hljs-string">Record</span> <span class="hljs-string">{</span> <span class="hljs-attr">score_value:</span> <span class="hljs-number">1500</span><span class="hljs-string">,</span> <span class="hljs-attr">player_name:</span> <span class="hljs-string">"yesterdayscore"</span><span class="hljs-string">.to_string(),</span> <span class="hljs-attr">timestamp_fake:</span> <span class="hljs-number">7000</span> <span class="hljs-string">};</span>
<span class="hljs-string">let</span> <span class="hljs-string">myscore</span> <span class="hljs-string">=</span> <span class="hljs-string">Record</span> <span class="hljs-string">{</span> <span class="hljs-attr">score_value:</span> <span class="hljs-number">800</span><span class="hljs-string">,</span> <span class="hljs-attr">player_name:</span> <span class="hljs-string">"myscore"</span><span class="hljs-string">.to_string(),</span> <span class="hljs-attr">timestamp_fake:</span> <span class="hljs-number">8000</span> <span class="hljs-string">};</span>
<span class="hljs-string">let</span> <span class="hljs-string">friendscore</span> <span class="hljs-string">=</span> <span class="hljs-string">Record</span> <span class="hljs-string">{</span> <span class="hljs-attr">score_value:</span> <span class="hljs-number">800</span><span class="hljs-string">,</span> <span class="hljs-attr">player_name:</span> <span class="hljs-string">"friendscore"</span><span class="hljs-string">.to_string(),</span> <span class="hljs-attr">timestamp_fake:</span> <span class="hljs-number">9000</span> <span class="hljs-string">};</span>
</code></pre></div>
<p>et mon vecteur qui les contient:</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-dts">let mut allscores :Vec<span class="hljs-params"><<span class="hljs-variable">&</span>Record></span> = Vec::new();
allscores.push(<span class="hljs-variable">&yesterdayscore</span>);
allscores.push(<span class="hljs-variable">&myscore</span>);
allscores.push(<span class="hljs-variable">&friendscore</span>);
</code></pre></div>
<p>ça sérialize mais ça ne deserialize pas ; pas besoin de lifetime dans mon cas.</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span></div><pre><code class="hljs language-dts">let serialized = serde_json::to_string(<span class="hljs-variable">&allscores</span>).unwrap();
println!(<span class="hljs-string">"serialized = {}"</span>, serialized);
let deserialized: std::vec::Vec<span class="hljs-params"><<span class="hljs-variable">&</span>Record></span> = serde_json::from_str(<span class="hljs-variable">&serialized</span>).unwrap();
</code></pre></div>
<p>ça m’étonne que rust ne pige pas la manoeuvre de lui même, python n’aurait pas bronché.L’ensemble
est plutôt simple, pas de type venu du fin fond du cosmos…
Comment écrire le déserializer et dois-je en plus faire un serializer ?
</p>