今回は、D言語でMessagePackを扱う方法をとても簡単に紹介します。
MessagePackとは
MessagePackは、簡単なオブジェクト構造をバイト列に変換する(シリアライズする)方法の一つです。 他のシリアライズの方法としては、JSONやBSONなどがあります。
準備
D言語の標準ライブラリたるPhobosには、MessagePackを扱うモジュールは含まれていません。 なので、MessagePackのD言語での公式実装である↓のライブラリを使用します。 https://github.com/msgpack/msgpack-d このライブラリは、以前にstd.msgpackとしてPhobos入りすると聞いたことあるのですが、現在のところまだPhobos入りしていません。
使い方
構造体をシリアライズ、デシリアライズする場合は、下記のように書きます。
import msgpack;
struct Data{
uint time;
string path;
string name;
}
void main(){
// シリアライズ
Data data = Data(644, "/etc/passwd", "eman");
byte[] serialized = data.pack();
// デシリアライズ
Data result;
serialized.unpack(result);
// 確認
assert(data == result);
}
ファイルに出力
シリアライズされたバイト列をファイルに出力したりするには、下記のように書きます。
import std.file, std.typecons;
void main(){
auto data = tuple(2, 2.71, "Napier");
enum file = "test.mspgack"
file.write(data.pack());
typeof(data) result;
(cast(ubyte[])file.read()).unpack(result);
assert(data == result);
}
まとめ
MessagePackを使うと、簡単に内部のデータをファイルに書き出すことができます。 設定などをファイルに保存したい場合など、ぜひMessagePackを使ってみてください。 余談ですが、packやunpackをUFCSで書いていると、まるでRubyを使っている気分になりますね。