1647514800
このリポジトリには、公式にサポートされているMongoDB Rustドライバーが含まれています。これは、RustアプリケーションでMongoDBデプロイメントと対話するために使用できるクライアント側ライブラリです。bson
BSONサポートにクレートを使用します。ドライバーには、設定された機能フラグに応じて、tokio
(デフォルト)またはのいずれかをサポートする完全非同期APIが含まれています。async-std
ドライバーには、機能フラグを介して有効にできる同期APIもあります。
ドライバーはcrates.ioで入手できます。アプリケーションでドライバーを使用するには、ドライバーをプロジェクトに追加するだけCargo.toml
です。
[dependencies]mongodb = "2.1.0"
このドライバーは、最も人気のある非同期ランタイムクレートの両方、つまりtokio
とをサポートしますasync-std
。デフォルトでは、ドライバーはを使用しますが、のいずれかまたは機能フラグをtokio
指定することにより、ランタイムを明示的に選択できます。"tokio-runtime""async-std-runtime"Cargo.toml
たとえば、ドライバーに操作を指示するにasync-std
は、以下を追加しますCargo.toml
。
[dependencies.mongodb]version = "2.1.0"default-features = falsefeatures = ["async-std-runtime"]
ドライバーは、ブロッキング同期APIも提供します。これを有効にするには、次の"sync"
機能を追加しますCargo.toml
。
[dependencies.mongodb]version = "2.1.0"default-features = falsefeatures = ["sync"]
注:同期APIが有効になっている場合、非同期固有のタイプは非公開になります(例mongodb::Client
)。mongodb::sync
同期固有のタイプは、 (例)からインポートできますmongodb::sync::Client
。
特徴 | 説明 | 追加の依存関係 | ディフォルト |
---|---|---|---|
tokio-runtime | tokio 非同期ランタイムのサポートを有効にする | tokiofull 機能付き1.0 | はい |
async-std-runtime | async-std ランタイムのサポートを有効にする | async-std 1.0 | いいえ |
sync | 同期APIを公開します(mongodb::sync )。このフラグは、非同期ランタイム機能フラグのいずれかと組み合わせて使用することはできません。 | async-std 1.0 | いいえ |
aws-auth | MONGODB-AWS認証メカニズムのサポートを有効にします。 | reqwest 0.11 | いいえ |
bson-uuid-0_8 | uuid 再エクスポートされたクレートのパブリックAPIでクレートのv0.8のサポートを有効にしますbson 。 | 該当なし | いいえ |
bson-chrono-0_4 | chrono 再エクスポートされたクレートのパブリックAPIでクレートのv0.4のサポートを有効にしますbson 。 | 該当なし | いいえ |
zlib-compression | でメッセージを圧縮するためのサポートを有効にするzlib | flate2 1.0 | いいえ |
zstd-compression | でメッセージを圧縮するためのサポートを有効にしますzstd 。このフラグにはRustバージョン1.54が必要です。 | zstd 0.9.0 | いいえ |
snappy-compression | でメッセージを圧縮するためのサポートを有効にするsnappy | snap 1.0.5 | いいえ |
以下は、ドライバーの簡単な使用例です。より具体的な例とAPIリファレンスについては、ドライバーのdocs.rsページを参照してください。
use mongodb::{Client, options::ClientOptions};
// Parse a connection string into an options struct.let mut client_options = ClientOptions::parse("mongodb://localhost:27017").await?;// Manually set an option.client_options.app_name = Some("My App".to_string());// Get a handle to the deployment.let client = Client::with_options(client_options)?;// List the names of the databases in that deployment.for db_name in client.list_database_names(None, None).await? { println!("{}", db_name);}
// Get a handle to a database.let db = client.database("mydb");// List the names of the collections in that database.for collection_name in db.list_collection_names(None).await? { println!("{}", collection_name);}
use mongodb::bson::{doc, Document};
// Get a handle to a collection in the database.let collection = db.collection::<Document>("books");let docs = vec![ doc! { "title": "1984", "author": "George Orwell" }, doc! { "title": "Animal Farm", "author": "George Orwell" }, doc! { "title": "The Great Gatsby", "author": "F. Scott Fitzgerald" },];// Insert some documents into the "mydb.books" collection.collection.insert_many(docs, None).await?;
Aは、クレートからの特性と特性Collection
を実装する任意のタイプでパラメータ化できます。SerializeDeserialize
serde
Document
# In Cargo.toml, add the following dependency.serde = { version = "1.0", features = ["derive"] }
use serde::{Deserialize, Serialize};#[derive(Debug, Serialize, Deserialize)]struct Book { title: String, author: String,}
// Get a handle to a collection of `Book`.let typed_collection = db.collection::<Book>("books");let books = vec![ Book { title: "The Grapes of Wrath".to_string(), author: "John Steinbeck".to_string(), }, Book { title: "To Kill a Mockingbird".to_string(), author: "Harper Lee".to_string(), },];// Insert the books into "mydb.books" collection, no manual conversion to BSON necessary.typed_collection.insert_many(books, None).await?;
クエリの結果は通常Cursor
、要求に応じてサーバーから結果をストリーミングする構造体を介して返されます。このCursor
タイプはStream
、クレートからトレイトを実装します。そのストリーミング機能にアクセスするには、またはトレイトfutures
の少なくとも1つをインポートする必要があります。StreamExt
TryStreamExt
# In Cargo.toml, add the following dependency.futures = "0.3"
// This trait is required to use `try_next()` on the cursoruse futures::stream::TryStreamExt;use mongodb::{bson::doc, options::FindOptions};
// Query the books in the collection with a filter and an option.let filter = doc! { "author": "George Orwell" };let find_options = FindOptions::builder().sort(doc! { "title": 1 }).build();let mut cursor = typed_collection.find(filter, find_options).await?;// Iterate over the results of the cursor.while let Some(book) = cursor.try_next().await? { println!("title: {}", book.title);}
ドライバーは、ブロッキング同期APIも提供します。有効にする方法については、「インストール」セクションを参照してください。
さまざまな同期固有のタイプはmongodb::sync
、非同期APIのようにクレートのトップレベルではなく、サブモジュールにあります。ただし、同期APIは内部的に非同期APIを呼び出すため、外観と動作は同じです。
use mongodb::{ bson::doc, sync::Client,};use serde::{Deserialize, Serialize};#[derive(Debug, Serialize, Deserialize)]struct Book { title: String, author: String,}
let client = Client::with_uri_str("mongodb://localhost:27017")?;let database = client.database("mydb");let collection = database.collection::<Book>("books");let docs = vec![ Book { title: "1984".to_string(), author: "George Orwell".to_string(), }, Book { title: "Animal Farm".to_string(), author: "George Orwell".to_string(), }, Book { title: "The Great Gatsby".to_string(), author: "F. Scott Fitzgerald".to_string(), },];// Insert some books into the "mydb.books" collection.collection.insert_many(docs, None)?;let cursor = collection.find(doc! { "author": "George Orwell" }, None)?;for result in cursor { println!("title: {}", result?.title);}
ドライバーは、CIでLinux、MacOS、およびWindowsに対してテストします。
現在、サーバーのバージョンが4.2以上でない限り、ドライバーにはM2より上のAtlas層への接続に問題があります。現在、この修正に取り組んでいますが、当面の間、回避策はクラスターを4.2にアップグレードすることです。ドライバには、M0またはM2インスタンスのいずれにも既知の問題はありません。
Windowsでは、ドライバーがDNSルックアップを実行するために使用するクレートに既知の問題がありtrust-dns-resolver
、システム構成を使用するリゾルバーのパフォーマンスが大幅に低下します。ドライバーはデフォルトでシステム構成を使用するため、問題が解決するまで、Windowsで代替のリゾルバー構成を指定することをお勧めします。これは、接続文字列を使用してデプロイメントに接続する場合にのみ効果がありmongodb+srv
ます。
例えば
use mongodb::{ options::{ClientOptions, ResolverConfig}, Client,};
let options = ClientOptions::parse_with_resolver_config( "mongodb+srv://my.host.com", ResolverConfig::cloudflare(),).await?;let client = Client::with_options(options)?;
async Rustでは、フューチャーをポーリングして完了するのではなく、一定期間後にドロップすることでキャンセルとタイムアウトを実装するのが一般的です。tokio::time::timeout
たとえば、これがどのように機能するかです。ただし、ドライバーから返された先物を使用してこれを行うと、ドライバーの内部が一貫性のない状態のままになる可能性があり、予測できない、または誤った動作につながる可能性があります(詳細についてはRUST-937を参照)。そのため、ドライバーから完了までに返されたすべての先物をポーリングすることを強くお勧めします。tokio::time::timeout
ドライバーと同様にタイムアウトメカニズムを引き続き使用するための1つのオプションは、タスクを生成し、タスクでタイムアウトすることです。JoinHandle
ドライバーの先物に直接ではなく、先物。これにより、ドライバーの先物が常に完全にポーリングされると同時に、タイムアウトが発生した場合でもアプリケーションを続行できるようになります。
例えば
let collection = client.database("ok").collection("ok");let handle = tokio::task::spawn(async move { collection.insert_one(doc! { "x": 1 }, None).await});tokio::time::timeout(Duration::from_secs(5), handle).await???;
バグレポートを提出したり、機能リクエストを送信したりするには、Jiraプロジェクトのチケットを開いてください。
チケットを提出する前に、Jiraの検索機能を使用して、同様の問題がすでに提出されているかどうかを確認してください。
GitHubプルリクエストの形での投稿を奨励し、喜んで受け入れます。開く前に、必ずローカルでテストを実行してください。その方法については、テストセクションを確認してください。プルリクエストを開くと、継続的インテグレーションシステムで使用しているのと同じテストマトリックスに対してブランチが実行されるため、通常は、スタンドアロンに対してローカルでのみ統合テストを実行するだけで十分です。プルリクエストを開く前に、必ずリンターテストを実行してください。
テスト(ほとんどは統合テスト)を実行するには、MongoDBデプロイメントにアクセスできる必要があります。環境変数にMongoDB接続文字列を指定すると、テストではそれを使用してデプロイメントに接続します。MONGODB_URI
が設定されていない場合MONGODB_URI
、テストはポート27017でローカル展開に接続しようとします。
注:統合テストは、使用する必要のあるデータベース/コレクションをクリアしますが、その後はクリーンアップしません。
実際にテストを実行するにcargo
は、他のクレートと同じように使用できます。
cargo test --verbose # runs against localhost:27017export MONGODB_URI="mongodb://localhost:123"cargo test --verbose # runs against localhost:123
認証テストは、特定の要件が満たされている場合にのみテスト実行に含まれます。
--auth
有効になっている必要がありますMONGODB_URI
MONGODB_URI
有効であり、展開に対するroot権限を持っている必要がありますexport MONGODB_URI="mongodb://user:pass@localhost:27017"cargo test --verbose # auth tests included
特定のテストは、特定のトポロジに対してのみ実行されます。テストスイート全体が確実に実行されるようにするには、スタンドアロン、レプリケート、およびシャーディングされたデプロイメントに対して個別にテストを実行するようにしてください。
export MONGODB_URI="mongodb://my-standalone-host:27017" # mongod running on 27017cargo test --verboseexport MONGODB_URI="mongodb://localhost:27018,localhost:27019,localhost:27020/?replicaSet=repl" # replicaset running on ports 27018, 27019, 27020 with name replcargo test --verboseexport MONGODB_URI="mongodb://localhost:27021" # mongos running on 27021cargo test --verbose
TLS / SSLを有効にしてテストを実行するには、展開およびでテストを有効にする必要がありますMONGODB_URI
。
export MONGODB_URI="mongodb://localhost:27017/?tls=true&tlsCertificateKeyFile=cert.pem&tlsCAFile=ca.pem"cargo test --verbose
注:プルリクエストを開くと、コードは包括的なテストマトリックスに対して実行されるため、通常、トポロジ/認証/TLSのすべての組み合わせに対してローカルで統合テストを実行する必要はありません。
私たちのリンターテストでは、ナイトリーバージョンを使用rustfmt
してソースが適切にフォーマットされていることを確認し、安定バージョンをclippy
使用して一般的な間違いを静的に検出します。rustup
両方をインストールするために使用できます。
rustup component add clippy --toolchain stablerustup component add rustfmt --toolchain nightly
私たちのリンターテストはrustdoc
、必要なすべてのドキュメントが存在し、適切にフォーマットされていることを確認するためにも使用されます。rustdoc
標準のRustディストリビューションに含まれています。
リンターテストを実行するcheck-clippy.sh
には、ディレクトリ内の、、、check-rustfmt.sh
およびcheck-rustdoc.sh
スクリプトを実行し.evergreen
ます。3つすべてを実行するには、check-all.sh
スクリプトを使用します。
bash .evergreen/check-all.sh
マスターへのコミットは常緑樹で自動的に実行されます。
このクレートのMSRVは現在1.48.0です。これが増えることはめったになく、増えたとしても、マイナーバージョンまたはメジャーバージョンのリリースでのみ発生します。
このプロジェクトは、ApacheLicense2.0の下でライセンスされています。
リンク:https ://crates.io/crates/mongodb
1647514800
このリポジトリには、公式にサポートされているMongoDB Rustドライバーが含まれています。これは、RustアプリケーションでMongoDBデプロイメントと対話するために使用できるクライアント側ライブラリです。bson
BSONサポートにクレートを使用します。ドライバーには、設定された機能フラグに応じて、tokio
(デフォルト)またはのいずれかをサポートする完全非同期APIが含まれています。async-std
ドライバーには、機能フラグを介して有効にできる同期APIもあります。
ドライバーはcrates.ioで入手できます。アプリケーションでドライバーを使用するには、ドライバーをプロジェクトに追加するだけCargo.toml
です。
[dependencies]mongodb = "2.1.0"
このドライバーは、最も人気のある非同期ランタイムクレートの両方、つまりtokio
とをサポートしますasync-std
。デフォルトでは、ドライバーはを使用しますが、のいずれかまたは機能フラグをtokio
指定することにより、ランタイムを明示的に選択できます。"tokio-runtime""async-std-runtime"Cargo.toml
たとえば、ドライバーに操作を指示するにasync-std
は、以下を追加しますCargo.toml
。
[dependencies.mongodb]version = "2.1.0"default-features = falsefeatures = ["async-std-runtime"]
ドライバーは、ブロッキング同期APIも提供します。これを有効にするには、次の"sync"
機能を追加しますCargo.toml
。
[dependencies.mongodb]version = "2.1.0"default-features = falsefeatures = ["sync"]
注:同期APIが有効になっている場合、非同期固有のタイプは非公開になります(例mongodb::Client
)。mongodb::sync
同期固有のタイプは、 (例)からインポートできますmongodb::sync::Client
。
特徴 | 説明 | 追加の依存関係 | ディフォルト |
---|---|---|---|
tokio-runtime | tokio 非同期ランタイムのサポートを有効にする | tokiofull 機能付き1.0 | はい |
async-std-runtime | async-std ランタイムのサポートを有効にする | async-std 1.0 | いいえ |
sync | 同期APIを公開します(mongodb::sync )。このフラグは、非同期ランタイム機能フラグのいずれかと組み合わせて使用することはできません。 | async-std 1.0 | いいえ |
aws-auth | MONGODB-AWS認証メカニズムのサポートを有効にします。 | reqwest 0.11 | いいえ |
bson-uuid-0_8 | uuid 再エクスポートされたクレートのパブリックAPIでクレートのv0.8のサポートを有効にしますbson 。 | 該当なし | いいえ |
bson-chrono-0_4 | chrono 再エクスポートされたクレートのパブリックAPIでクレートのv0.4のサポートを有効にしますbson 。 | 該当なし | いいえ |
zlib-compression | でメッセージを圧縮するためのサポートを有効にするzlib | flate2 1.0 | いいえ |
zstd-compression | でメッセージを圧縮するためのサポートを有効にしますzstd 。このフラグにはRustバージョン1.54が必要です。 | zstd 0.9.0 | いいえ |
snappy-compression | でメッセージを圧縮するためのサポートを有効にするsnappy | snap 1.0.5 | いいえ |
以下は、ドライバーの簡単な使用例です。より具体的な例とAPIリファレンスについては、ドライバーのdocs.rsページを参照してください。
use mongodb::{Client, options::ClientOptions};
// Parse a connection string into an options struct.let mut client_options = ClientOptions::parse("mongodb://localhost:27017").await?;// Manually set an option.client_options.app_name = Some("My App".to_string());// Get a handle to the deployment.let client = Client::with_options(client_options)?;// List the names of the databases in that deployment.for db_name in client.list_database_names(None, None).await? { println!("{}", db_name);}
// Get a handle to a database.let db = client.database("mydb");// List the names of the collections in that database.for collection_name in db.list_collection_names(None).await? { println!("{}", collection_name);}
use mongodb::bson::{doc, Document};
// Get a handle to a collection in the database.let collection = db.collection::<Document>("books");let docs = vec![ doc! { "title": "1984", "author": "George Orwell" }, doc! { "title": "Animal Farm", "author": "George Orwell" }, doc! { "title": "The Great Gatsby", "author": "F. Scott Fitzgerald" },];// Insert some documents into the "mydb.books" collection.collection.insert_many(docs, None).await?;
Aは、クレートからの特性と特性Collection
を実装する任意のタイプでパラメータ化できます。SerializeDeserialize
serde
Document
# In Cargo.toml, add the following dependency.serde = { version = "1.0", features = ["derive"] }
use serde::{Deserialize, Serialize};#[derive(Debug, Serialize, Deserialize)]struct Book { title: String, author: String,}
// Get a handle to a collection of `Book`.let typed_collection = db.collection::<Book>("books");let books = vec![ Book { title: "The Grapes of Wrath".to_string(), author: "John Steinbeck".to_string(), }, Book { title: "To Kill a Mockingbird".to_string(), author: "Harper Lee".to_string(), },];// Insert the books into "mydb.books" collection, no manual conversion to BSON necessary.typed_collection.insert_many(books, None).await?;
クエリの結果は通常Cursor
、要求に応じてサーバーから結果をストリーミングする構造体を介して返されます。このCursor
タイプはStream
、クレートからトレイトを実装します。そのストリーミング機能にアクセスするには、またはトレイトfutures
の少なくとも1つをインポートする必要があります。StreamExt
TryStreamExt
# In Cargo.toml, add the following dependency.futures = "0.3"
// This trait is required to use `try_next()` on the cursoruse futures::stream::TryStreamExt;use mongodb::{bson::doc, options::FindOptions};
// Query the books in the collection with a filter and an option.let filter = doc! { "author": "George Orwell" };let find_options = FindOptions::builder().sort(doc! { "title": 1 }).build();let mut cursor = typed_collection.find(filter, find_options).await?;// Iterate over the results of the cursor.while let Some(book) = cursor.try_next().await? { println!("title: {}", book.title);}
ドライバーは、ブロッキング同期APIも提供します。有効にする方法については、「インストール」セクションを参照してください。
さまざまな同期固有のタイプはmongodb::sync
、非同期APIのようにクレートのトップレベルではなく、サブモジュールにあります。ただし、同期APIは内部的に非同期APIを呼び出すため、外観と動作は同じです。
use mongodb::{ bson::doc, sync::Client,};use serde::{Deserialize, Serialize};#[derive(Debug, Serialize, Deserialize)]struct Book { title: String, author: String,}
let client = Client::with_uri_str("mongodb://localhost:27017")?;let database = client.database("mydb");let collection = database.collection::<Book>("books");let docs = vec![ Book { title: "1984".to_string(), author: "George Orwell".to_string(), }, Book { title: "Animal Farm".to_string(), author: "George Orwell".to_string(), }, Book { title: "The Great Gatsby".to_string(), author: "F. Scott Fitzgerald".to_string(), },];// Insert some books into the "mydb.books" collection.collection.insert_many(docs, None)?;let cursor = collection.find(doc! { "author": "George Orwell" }, None)?;for result in cursor { println!("title: {}", result?.title);}
ドライバーは、CIでLinux、MacOS、およびWindowsに対してテストします。
現在、サーバーのバージョンが4.2以上でない限り、ドライバーにはM2より上のAtlas層への接続に問題があります。現在、この修正に取り組んでいますが、当面の間、回避策はクラスターを4.2にアップグレードすることです。ドライバには、M0またはM2インスタンスのいずれにも既知の問題はありません。
Windowsでは、ドライバーがDNSルックアップを実行するために使用するクレートに既知の問題がありtrust-dns-resolver
、システム構成を使用するリゾルバーのパフォーマンスが大幅に低下します。ドライバーはデフォルトでシステム構成を使用するため、問題が解決するまで、Windowsで代替のリゾルバー構成を指定することをお勧めします。これは、接続文字列を使用してデプロイメントに接続する場合にのみ効果がありmongodb+srv
ます。
例えば
use mongodb::{ options::{ClientOptions, ResolverConfig}, Client,};
let options = ClientOptions::parse_with_resolver_config( "mongodb+srv://my.host.com", ResolverConfig::cloudflare(),).await?;let client = Client::with_options(options)?;
async Rustでは、フューチャーをポーリングして完了するのではなく、一定期間後にドロップすることでキャンセルとタイムアウトを実装するのが一般的です。tokio::time::timeout
たとえば、これがどのように機能するかです。ただし、ドライバーから返された先物を使用してこれを行うと、ドライバーの内部が一貫性のない状態のままになる可能性があり、予測できない、または誤った動作につながる可能性があります(詳細についてはRUST-937を参照)。そのため、ドライバーから完了までに返されたすべての先物をポーリングすることを強くお勧めします。tokio::time::timeout
ドライバーと同様にタイムアウトメカニズムを引き続き使用するための1つのオプションは、タスクを生成し、タスクでタイムアウトすることです。JoinHandle
ドライバーの先物に直接ではなく、先物。これにより、ドライバーの先物が常に完全にポーリングされると同時に、タイムアウトが発生した場合でもアプリケーションを続行できるようになります。
例えば
let collection = client.database("ok").collection("ok");let handle = tokio::task::spawn(async move { collection.insert_one(doc! { "x": 1 }, None).await});tokio::time::timeout(Duration::from_secs(5), handle).await???;
バグレポートを提出したり、機能リクエストを送信したりするには、Jiraプロジェクトのチケットを開いてください。
チケットを提出する前に、Jiraの検索機能を使用して、同様の問題がすでに提出されているかどうかを確認してください。
GitHubプルリクエストの形での投稿を奨励し、喜んで受け入れます。開く前に、必ずローカルでテストを実行してください。その方法については、テストセクションを確認してください。プルリクエストを開くと、継続的インテグレーションシステムで使用しているのと同じテストマトリックスに対してブランチが実行されるため、通常は、スタンドアロンに対してローカルでのみ統合テストを実行するだけで十分です。プルリクエストを開く前に、必ずリンターテストを実行してください。
テスト(ほとんどは統合テスト)を実行するには、MongoDBデプロイメントにアクセスできる必要があります。環境変数にMongoDB接続文字列を指定すると、テストではそれを使用してデプロイメントに接続します。MONGODB_URI
が設定されていない場合MONGODB_URI
、テストはポート27017でローカル展開に接続しようとします。
注:統合テストは、使用する必要のあるデータベース/コレクションをクリアしますが、その後はクリーンアップしません。
実際にテストを実行するにcargo
は、他のクレートと同じように使用できます。
cargo test --verbose # runs against localhost:27017export MONGODB_URI="mongodb://localhost:123"cargo test --verbose # runs against localhost:123
認証テストは、特定の要件が満たされている場合にのみテスト実行に含まれます。
--auth
有効になっている必要がありますMONGODB_URI
MONGODB_URI
有効であり、展開に対するroot権限を持っている必要がありますexport MONGODB_URI="mongodb://user:pass@localhost:27017"cargo test --verbose # auth tests included
特定のテストは、特定のトポロジに対してのみ実行されます。テストスイート全体が確実に実行されるようにするには、スタンドアロン、レプリケート、およびシャーディングされたデプロイメントに対して個別にテストを実行するようにしてください。
export MONGODB_URI="mongodb://my-standalone-host:27017" # mongod running on 27017cargo test --verboseexport MONGODB_URI="mongodb://localhost:27018,localhost:27019,localhost:27020/?replicaSet=repl" # replicaset running on ports 27018, 27019, 27020 with name replcargo test --verboseexport MONGODB_URI="mongodb://localhost:27021" # mongos running on 27021cargo test --verbose
TLS / SSLを有効にしてテストを実行するには、展開およびでテストを有効にする必要がありますMONGODB_URI
。
export MONGODB_URI="mongodb://localhost:27017/?tls=true&tlsCertificateKeyFile=cert.pem&tlsCAFile=ca.pem"cargo test --verbose
注:プルリクエストを開くと、コードは包括的なテストマトリックスに対して実行されるため、通常、トポロジ/認証/TLSのすべての組み合わせに対してローカルで統合テストを実行する必要はありません。
私たちのリンターテストでは、ナイトリーバージョンを使用rustfmt
してソースが適切にフォーマットされていることを確認し、安定バージョンをclippy
使用して一般的な間違いを静的に検出します。rustup
両方をインストールするために使用できます。
rustup component add clippy --toolchain stablerustup component add rustfmt --toolchain nightly
私たちのリンターテストはrustdoc
、必要なすべてのドキュメントが存在し、適切にフォーマットされていることを確認するためにも使用されます。rustdoc
標準のRustディストリビューションに含まれています。
リンターテストを実行するcheck-clippy.sh
には、ディレクトリ内の、、、check-rustfmt.sh
およびcheck-rustdoc.sh
スクリプトを実行し.evergreen
ます。3つすべてを実行するには、check-all.sh
スクリプトを使用します。
bash .evergreen/check-all.sh
マスターへのコミットは常緑樹で自動的に実行されます。
このクレートのMSRVは現在1.48.0です。これが増えることはめったになく、増えたとしても、マイナーバージョンまたはメジャーバージョンのリリースでのみ発生します。
このプロジェクトは、ApacheLicense2.0の下でライセンスされています。