deserialize
目的
Deserializetrait を標準化 し、Serializeが返 したstrから値 を戻 す入口 を共通化 します。変換 失敗 はStdErrorKind::ParseErrorとして正規化 し、trait利用 側 が個別 の整数 error code に依存 しなくてよいようにします。
注意
当面 はstrだけを入力 にします。文法 や人間 向 け入力 の寛容 な扱 いはParseの別仕様 で整理 します。
計算量
- 各 impl に
依存 します。boolは O(1)、文字列長 を n とする整数 復元 は O(n) です。
Deserialize
str から
目的
機械 向 け文字列表現 から値 を戻 し、保存 や比較 の往復 を共通 helper で扱 えるようにします。
注意
失敗 はResult::Err StdErrorKind::ParseErrorとして返 すのを標準 にします。詳細 な診断 が必要 な処理 はOutcomeとDiagを使 います。
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 に
依存 します。