Rust 親子関係を持つレコードを木構造に変換する

以下のような親子(id -> parent)関係のあるレコードを、 [ { id: "1", parent: "", name: "/", path: "/", child_count: 0, depth: 1 }, { id: "2", parent: "1", name: "home", path: "/home/", child_count: 0, depth: 2 }, { id: "3", parent: "2", name:…

Rust jwtの発行と検証

actix-webでjwtの発行と検証を行ったので記録しておきます。 Cargo.toml こちら GitHub - Keats/jsonwebtoken: JWT lib in rust を使用しました。 jsonwebtoken = "7" jwtの生成 例として8時間まで有効のjwtを生成。尚、expireを指定しないとjwt decode時にt…

Rust Dieselでプリペーアドクエリを発行する

ドキュメントには、 let users = sql_query("SELECT * FROM users WHERE id > ? AND name <> ?") .bind::<Integer, _>(1) .bind::<Text, _>("Tess") .get_results(&connection); diesel::query_builder::SqlQuery - Rust とあるけど、MySQLとPostgreSQLでプレースホルダー指定子が</text,></integer,>…

Rust Disel DBのデフォルト値を使いつつ、model bindと共存する

fetch処理前提 例えば、select * from ...と全カラム取得する場合、bindするmodelの定義は #[derive(Debug, Clone, Queryable, Identifiable)] pub struct Account { pub id: String, pub name: String, pub email: String, pub password: String, pub avata…

Rust validatorを導入する

actix-webにvalidation処理を導入したので記録しておきます。 使用したcrateはこちら。 GitHub - Keats/validator: Simple validation for Rust structs Cargo.toml validator = { version = "0.12", features = ["derive"] } deriveを指定することでstruct…

Rust UUIDとパスワードハッシュを生成する

UUIDの生成 uuid crateを使用します。 uuid - Rust Cargo.toml uuid = { version = "0.8.1", features = ["serde", "v4"] } 生成処理のサンプル use uuid::Uuid; let uuid = Uuid::new_v4().to_hyphenated().to_string(); パスワードハッシング アルゴリズム…

Rust mockallでモックインスタンスを導入する

RustでのUnit test時にモックインスタンスを導入したので記録しておきます。 mockallの導入 Cargo.toml [dependencies] mockall = "0.8.3" mock化するインスタンスの作成 自分の場合はDBアクセスを行うRepositoryインスタンスをモック化した。実際にDBアクセ…