NEPLg2 Standard Library - deserialize - deserialize
Web Playground
Web Playground

deserialize

機械きかい文字列表現もじれつひょうげんからあたい復元ふくげんする trait ぐん

目的もくてき

  • Deserialize trait を標準化ひょうじゅんかし、Serializeかえした str からあたいもど入口いりぐち共通化きょうつうかします。
  • 変換へんかん失敗しっぱいStdErrorKind::ParseError として正規化せいきかし、trait 利用りようがわ個別こべつの整数 error code に依存いそんしなくてよいようにします。

注意ちゅうい

  • 当面とうめんstr だけを入力にゅうりょくにします。
  • 文法ぶんぽう人間にんげん入力にゅうりょく寛容かんようあつかいは Parse別仕様べつしよう整理せいりします。

計算量けいさんりょう

  • 各 impl に依存いそんします。bool は O(1)、文字列長もじれつちょうを n とする整数せいすう復元ふくげんは O(n) です。

Deserialize

str からあたい復元ふくげんする能力のうりょく

目的もくてき

  • 機械きかい文字列表現もじれつひょうげんからあたいもどし、保存ほぞん比較ひかく往復おうふく共通きょうつう helper であつかえるようにします。

注意ちゅうい

  • 失敗しっぱいResult::Err StdErrorKind::ParseError としてかえすのを標準ひょうじゅんにします。
  • 詳細しょうさい診断しんだん必要ひつよう処理しょりOutcomeDiag使つかいます。

deserialize

trait をとおして str からあたい復元ふくげんする

目的もくてき

  • がわかたごとの具体的ぐたいてき API を意識いしきせず、共通きょうつう入口いりぐちから復元ふくげんできるようにします。

使用例しようれい

TEST
#entry main
#target std
#import "std/test" as *
#import "core/traits/deserialize" as *
#import "alloc/diag/error" as *
fn main <()*>i32> ():
    match deserialize<i32> "42":
        Result::Ok v:
            assert_eq_i32 42 v
        Result::Err e:
            match e:
                StdErrorKind::ParseError:
                    test_fail "deserialize<i32> failed unexpectedly";
                StdErrorKind::Failure:
                    test_fail "wrong error kind";
                StdErrorKind::OutOfMemory:
                    test_fail "wrong error kind";
                StdErrorKind::EmptyCollection:
                    test_fail "wrong error kind";
                StdErrorKind::IndexOutOfBounds:
                    test_fail "wrong error kind";
                StdErrorKind::KeyNotFound:
                    test_fail "wrong error kind";
                StdErrorKind::CapacityExceeded:
                    test_fail "wrong error kind";
                StdErrorKind::InvalidOperation:
                    test_fail "wrong error kind";
                StdErrorKind::InvalidUtf8:
                    test_fail "wrong error kind";
                StdErrorKind::IoError:
                    test_fail "wrong error kind";
                StdErrorKind::Other:
                    test_fail "wrong error kind";
    0

実装じっそう

  • Deserialize::deserialize s をそのままびます。

注意ちゅうい

  • 型推論かたすいろんきにくいので、しでは deserialize<i32> のような型引数かたひきすうける前提ぜんていです。

計算量けいさんりょう

  • impl に依存いそんします。