スクリプトのお勉強 技術

Rustのお勉強をしてみる(XMLRPCクライアント編)

投稿日:

なんとなく手付かずだったので、Rustの勉強をしてみようと思います。

手始めとして、なぜかXMLRPCクライアントを作ってみます。

環境

  • WSL2
  • Ubuntu 22.04 LTS

Rustインストール

インストール方法は以下です。

以下で自分のホームディレクトリにインストールします。

$ curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh
$ source ~/.bashrc
$ rustc -V
rustc 1.66.0 (69f9c33d7 2022-12-12)

XMLRPCサーバ側(Python)

RustでXMLRPCクライアントを作ろうと思いますが、接続先のXMLRPCサーバは面倒なのでPythonで作成します。

add関数を提供してみます。戻り値はあえて辞書にしてます。

from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler

# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)

# Create server
with SimpleXMLRPCServer(('localhost', 9000),
                        requestHandler=RequestHandler) as server:
    server.register_introspection_functions()

    # Register a function under a different name
    def adder_function(x, y):
        return dict(result=x + y)

    server.register_function(adder_function, 'add')

    server.serve_forever()

Rust開始

以下まで準備しました。

$ cargo new rust-xmlrpc
$ cd rust-xmlrpc
$ cargo run
   Compiling rust-xmlrpc v0.1.0 (/home/tanino/script-plactice/rust-xmlrpc/rust-xmlrpc)
    Finished dev [unoptimized + debuginfo] target(s) in 0.44s
     Running `target/debug/rust-xmlrpc`
Hello, world!

あとlibssl-devをインストールする必要があります。でないとcargo run時に落ちます。

$ sudo apt instlal libssl-dev

XMLRPCクライアントのサンプル

いよいよXMLRPCクライアントです。

 Calgo.toml

要は、dependenciesにxmlrpcを入れます。

[package]
name = "rust-xmlrpc-client"
version = "0.1.0"
edition = "2021"

[dependencies]
xmlrpc = "0.15.1"

src/main.rs

クライアント部分は以下です。

extern crate xmlrpc;

use xmlrpc::Request;

fn main() {
    let add_request = Request::new("add").arg(2).arg(8); // Compute 2 + 8

    let request_result = add_request.call_url("http://127.0.0.1:9000/RPC2");

    println!("Result: {:?}", request_result);

    let _add_result = request_result.unwrap();

    println!("_add_result: {:?}", _add_result["result"]);
}

起動結果

起動すると以下になります。ちゃんと辞書として結果が返ってきているのがわかります。

$ cargo run
   Compiling rust-xmlrpc-client v0.1.0 (/home/tanino/script-plactice/rust-xmlrpc/rust-xmlrpc)
    Finished dev [unoptimized + debuginfo] target(s) in 2.41s
     Running `target/debug/rust-xmlrpc-client`
Result: Ok(Struct({"result": Int(10)}))
_add_result: Int(10)

おわりに

思った以上に簡単でした。次は、REST APIのserverとclientを作ろうと思います。

参考

  • RustのXMLRPC(標準?)
    https://docs.rs/xmlrpc/latest/xmlrpc/

-スクリプトのお勉強, 技術

執筆者:

関連記事

no image

GLP-1 メディカルダイエット 58日目

メディカルダイエットして58日目の記録をしておこうと思います。 9回目。 今回は左腹(中部)に打ちました。痛いのはいまだに慣れない。。 土曜にゲットしてした 渋谷に行ってきたが、そこの医院には相変わら …

Pythonのmock.patchを使ってみる

単体テストによく使われるMockライブラリ Pythonで単体テストを行う際、実際のライブラリを使用してしまうと、実際の環境を用意しなければいけません。 例えば、データベースのテストをする際に、データ …

小ネタ: JavaScriptにてBase64エンコード/デコードする方法

小ネタです。JavaScriptにてBase64エンコード/デコードをしようとして、意外と詰まったので、メモ的に方法を書いておきます。 結論: js-base64ライブラリを使用する これだけです。。 …

故障物(8インチタブレットからBMAX MaxPad l11に)

ついに故障 ついに8インチタブレットがほぼ故障しました。「ほぼ」というのは、バッテリーが使えずずっと電源線に繋げてないと使えないからです。 それではタブレットの意味がありません。 つぎは10インチタブ …

ワンライナーから使いそうなのを抜粋

ワンライナー多すぎ、、 https://linuxcommandlibrary.com/basic/oneliners は膨大なワンライナーがあっていいのですが、多すぎて、何が使えるかぱっと見分かりま …

google オプトアウト Click here to opt-out.