スクリプトのお勉強 技術

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/

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

執筆者:

関連記事

「Python3 メモ」 独自例外クラスからの値取得/変数の内容取得

忙しい。。 この時期でなぜか忙しく、ブログ書いてる暇ない。。のでメモ書き程度。そして、内容をよく忘れるやつ。。 python3の独自例外クラス 例外クラスからの値取得方法をいつも忘れます。ある関数or …

Django2.2 でのMySQL5.1対応

「対応」と書きながら、思い切り回避ですが。 マイグレーション時のエラー マイグレーションしたら、以下のエラーになりました。 $ pipenv run python3 manage.py migrate …

リモート実家帰りしてみる

このご時世、実家には直接帰れないけど、1月には一応実家帰り的な感じでリモート実家帰りをしようかと思いました。 リモートは大変。。 一応実家には自分で設置したインターネットや無線LANがあるので、Zoo …

@nifty auひかり タイプVからタイプGに変えてみた

家のインターネットはいままで、光回線ではありましたが、昔のVSDLのままでした。auひかりでいう、マンション タイプVというやつです。 それを近年、リモートワークが増えていることや、半導体需要がなんと …

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

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

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