スクリプトのお勉強 技術

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/

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

執筆者:

関連記事

Pipenvでライブラリ(*.whl)をキャッシュする方法

仕事でWebアプリケーションを作成した場合、ガンガンとライブラリのバージョンを上げたりはしない場合があります。 そして、長期間放置されるタイプのWebアプリケーションの場合、使用しているライブラリが、 …

CentOS7 + Django2.2でSQlite3を使用する方法

そのままだとエラーになる 素のCentOS7で、SQLite3を使用して、Djangoアプリを起動すると以下のエラーになります。 File “/opt/webapps/django_upload/.v …

WSL2にOpenCV + Pythonをインストールする

お手軽にやろうと思ってやってみました。作業手順自体を見ると、お手軽ではないかもしれません。 環境 インストールする/した環境は以下の通りです。 WSL2Ubuntu 20.04.2 LTSPython …

小ネタ: Ansible , with_itemsをloopに変える方法

とっても小さい小ネタです。 Ansible 2.4(今現在) -> Ansible 2.9に変えたい Ansibleを使用していますが、だいたい2.4ぐらいを使っています。流石にバージョンアップしない …

めっちゃ冷や汗。。(^^;;)

めっちゃ冷や汗が出たので、書いておこう。。 $ ls [‘ [‘という名のファイルを無意識に作ったらしい。もちろん意図的ではない。 なんとなく、消そうとして、、、 $ rm -rf “[\ …

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