
このクレートの目標は、Web APIにRust Bindingsを提供し、RustとJavaScriptの間の高度な相互運用性を可能にすることです。
このソフトウェアは、これらの素晴らしい人々のおかげであなたにもたらされました:
ありがとう!
JavaScriptコードを錆に直接埋め込むことができます。
let message = "Hello, 世界!" ;
let result = js ! {
alert ( @ { message } ) ;
return 2 + 2 * 2 ;
} ;
println ! ( "2 + 2 * 2 = {:?}" , result ) ;閉鎖もサポートされています:
let print_hello = | name : String | {
println ! ( "Hello, {}!" , name ) ;
} ;
js ! {
var print_hello = @ { print_hello } ;
print_hello ( "Bob" ) ;
print_hello . drop ( ) ; // Necessary to clean up the closure on Rust's side.
}Serdeのおかげで、任意の構造を渡すこともできます。
# [ derive ( Serialize ) ]
struct Person {
name : String ,
age : i32
}
js_serializable ! ( Person ) ;
js ! {
var person = @ { person } ;
console . log ( person . name + " is " + person . age + " years old." ) ;
} ;このクレートは、たとえば、多くのWeb APIも公開しています。
let button = document ( ) . query_selector ( "#hide-button" ) . unwrap ( ) . unwrap ( ) ;
button . add_event_listener ( move |_ : ClickEvent | {
for anchor in document ( ) . query_selector_all ( "#main a" ) {
js ! ( @ { anchor } . style = "display: none;" ; ) ;
}
} ) ;錆機能をJavaScriptにさらすこともサポートされています。
# [ js_export ]
fn hash ( string : String ) -> String {
let mut hasher = Sha1 :: new ( ) ;
hasher . update ( string . as_bytes ( ) ) ;
hasher . digest ( ) . to_string ( )
}次に、node.jsからこれを行うことができます:
var hasher = require ( "hasher.js" ) ; // Where `hasher.js` is generated from Rust code.
console . log ( hasher . hash ( "Hello world!" ) ) ;または、同じ.jsファイルを使用して、Webブラウザーで使用することもできます。
< script src =" hasher.js " > </ script >
< script >
Rust . hasher . then ( function ( hasher ) {
console . log ( hasher . hash ( "Hello world!" ) ) ;
} ) ;
</ script >小包を使用している場合は、実験用小包プラグインも使用できます。まず、既存の小包プロジェクトでこれを行います。
$ npm install --save parcel-plugin-cargo-web
そして単純に:
import hasher from "./hasher/Cargo.toml" ;
console . log ( hasher . hash ( "Hello world!" ) ) ; いくつかの例を見てください:
examples/minimal - アラートを呼び出す完全に最小限の例examples/todomvc -NYIVELY実装TODOMVCアプリケーション。 DOMを呼び出す方法を示しますexamples/hasher錆機能をJavaScriptにエクスポートする方法と、バニラのWebブラウザー環境またはnodejsからそれらを呼び出す方法を示していますexamples/hasher-parcel小包プロジェクトでエクスポートされた錆機能をインポートして呼び出す方法を示していますpinky-web -NESエミュレータ。ここで、事前コンパイルされたバージョンで再生できますAPIドキュメントもご覧いただけます。
カーゴウェブをインストールします:
$ cargo install -f cargo-web
examples/todomvcに移動し、これらのコマンドのいずれかを使用して例を開始します。
RustのネイティブWebAssemblyバックエンドを使用して、WebAssemblyにコンパイルします。
$ cargo web start --target=wasm32-unknown-unknown
emscriptenを使用してasm.jsにコンパイルします。
$ cargo web start --target=asmjs-unknown-emscripten
emscriptenを使用してWebAssemblyにコンパイルします。
$ cargo web start --target=wasm32-unknown-emscripten
ブラウザでhttp://localhost:8000にアクセスしてください。
*-emscriptenターゲットの場合cargo-web必要ありませんが、emscriptenを必要としないネイティブwasm32-unknown-unknownでは、 cargo-webを機能させる必要があります!
stdweb 0.4.20
wasm-bindgenとの互換性FullscreenChangeEvent stdweb 0.4.19
Document::fullscreen_enabledDocument::fullscreen_elementInputElement::selection_startInputElement::selection_endInputElement::set_selection_startInputElement::set_selection_endObject::to_iterWindow::confirm&Array sは、 TryFromを通じてVecに変換できるようになりましたfutures関連APIは、最新の夜間と連携するように更新されましたsyn依存関係はバージョン1に更新されましたstdweb 0.4.18
js!マクロをuseしてインポートできるようになりましたBeforeUnloadEventUnloadEventIBlob::sliceIBlob::slice_with_content_typeIWindowOrWorker::set_clearable_timeout stdweb 0.4.17
futures関連APIは、最新の夜間と連携するように更新されましたstdweb 0.4.16
wasm-bindgen互換性。 wasm-bindgenを使用したプロジェクトでstdweb使用できるようになりましたcargo-webバージョンは0.6.24になりましたstdweb 0.4.15
futures関連APIは、最新の夜間と連携するように更新されましたFormDataFormDataEntryMouseButtonsStateBlob::new stdweb 0.4.14
js! JSスニペットから何も返さない場合、Macroはわずかに効率的なコードを生成するようになりました。これにより、大部分のケースで@(no_return)注釈を追加する必要があります。File stdweb 0.4.13
js!マクロの空白の取り扱いITouchEventTouchTouchTypeTouchEventTouchMoveTouchLeaveTouchEnterTouchEndTouchCancelTouchStartXmlHttpRequest::set_response_type stdweb 0.4.12
cargo-webなしでwasm32-unknown-unknownターゲットをコンパイルしようとするときに診断の改善stdweb 0.4.11
cargo-webバージョンは現在0.6.22ですwasm32-unknown-unknownは現在、安定した錆について正式にサポートされていますwasm32-unknown-unknownのデバッグビルドが現在サポートされていますjs!マクロは、手続き型マクロを使用して部分的に実装されていますDocument::import_nodeIElement::slotIElement::attach_shadowIElement::shadow_rootISlotableShadowRootShadowRootModeTemplateElementSlotElementSlotChangeEventIParentNode::query_selectorおよびIParentNode::query_selector_all 、適切なエラータイプを返すようになりましたstdweb 0.4.10 、 stdweb-derive 0.5.1
IElement::insert_adjacent_htmlIElement::insert_html_beforeIElement::insert_html_afterIElement::prepend_htmlIElement::append_htmlIElement::namespace_uriIElement::closestDocument::create_element_nsWindow::get_selectionAbortErrorSelectionTypeSelectionRange.try_into() / .try_from()を使用する場合)は、 TypeErrorに変換可能になりましたDrawImageErrorなど)は、 js!マクロTypeErrorは修正されました( DOMExceptionとして誤って扱われました)Number .into() / .from()でf64に変換できるようになりました。Mutを追加しました。これは、JSにFnMut閉鎖を安全に渡すための新しいラッパータイプですjs!マクロ;今のところオプションですが、このラッパータイプの使用は将来的に必須です!FnMut閉鎖は、再帰的に呼び出すことはできません#[derive(ReferenceType)]一般的なタイプの限られたサブセットをサポートするようになりました#[async_test]属性マクロ(夜間のみ)でサポートされるようになりましたfutures 0.3に更新(毎晩のみ) stdweb 0.4.9 、 stdweb-derive 0.5.0
ScrollEventDragRelatedEventDragEventDragStartEventDragEndEventDragEnterEventDragLeaveEventDragOverEventDragExitEventDragDropEventDataTransferEffectAllowedDropEffectDataTransferItemListDataTransferItemDataTransferItemKindIDragEventValueは、 try_intoでOption< Serde< T > >に変換できるようになりましたi32およびf64以外のタイプを使用できるようになり、ほとんどの場合に機能しますkeyupとkeydownの両方が同じJSタイプ( KeyboardEvent )を共有しているため、以前はKeyDownEventイベントとしてkeyupイベントをゆるくすることができました。これからは、イベントのtypeフィールドもチェックされているため、このような変換はもう許可されていません。 0.4.8
wasm32-unknown-unknownをターゲットにするとき、最新の夜間にコンピレーションを修正しましたPointerLockChangeEventPointerLockErrorEventMouseWheelEventMouseWheelDeltaModeXhrResponseTypeXmlHttpRequest::raw_responseWindow::device_pixel_ratioDocument::pointer_lock_elementDocument::exit_pointer_lock 0.4.7
AuxClickEventMouseEnterEventMouseLeaveEventContextMenuEventSelectionChangeEventFileListFileReaderReadyStateGamepadGamepadButtonGamepadButtonMappingGamepadEventCanvasRenderingContext2d::clear_rectを修正しましたVecおよびArrayBufferからTypedArrayを作成するときにリークを修正しました。 0.4.6
docs.rsをもう一度修正しますSubmitEventIChildNodeCanvasElement::to_data_urlを修正します0.4.5
DocumentFragmentSelectElementOptionElementHtmlCollectionNode::from_htmlValue::is_nullSocketMessageDataNodeTypefuturesの更新0.2 0.4.4
docs.rs (できれば)を修正します。Location::originLocation::protocolLocation::hostLocation::hostnameLocation::portLocation::pathnameLocation::searchSecurityErrorを返します。Location::hashLocation::href 0.4.3
WeakMapのキーとして使用できないオブジェクトは、今すぐサポートする必要があります(たとえば、Firefoxの下のWebGL関連オブジェクトの一部)Element::get_bounding_client_rectElement::scroll_topElement::scroll_leftWindow::page_x_offsetWindow::page_y_offsetNodeList::itemDocument::bodyDocument::headDocument::titleDocument::set_titleIMouseEvent::offset_xIMouseEvent::offset_yCompositeOperationLineCapLineJoinRepetitionTextAlignTextBaselineAddColorStopError 、 DrawImageError 、 GetImageDataErrorMouseOverEventMouseOutEventPointerOverEventPointerEnterEventPointerDownEventPointerMoveEventPointerUpEventPointerCancelEventPointerOutEventPointerLeaveEventGotPointerCaptureEventLostPointerCaptureEventIPointerEvent 0.4.2
CanvasRenderingContext2d::get_canvasを修正しましたFillRuleとSocketReadyStateIElementに追加された新しい属性関連メソッドDateバインディング0.4.1
wasm32-unknown-unknownでの最新の夜間錆のサポートSocketBinaryType enumCanvasRenderingContext2dのための多数の新しい方法CanvasGradient 、 CanvasPattern 、 CanvasStyle 、 ImageData 、 TextMetricsIndexSizeError 、 NotSupportedError 、 TypeError 0.4
ValueからArrayとObjectバリアントを削除しました。これらは現在、 Referenceとして扱われますValueには追加のバリアント: SymbolがありますInputElement::set_kindInputElement::filesKeydownEvent > KeyDownEventKeyupEvent > KeyUpEventKeypressEvent > KeyPressEventReadyState > FileReaderReadyStateInputElement::value > InputElement::raw_valueInputElement::set_value > InputElement::set_raw_valueArrayBuffer::newはu64引数を取りますInputElement::set_raw_valueはInto< Value >の代わりに&str取るようになりました>usizeを返したすべての方法はu32返しますINode::remove_child 、 OkケースでNodeを返すようになりましたu64を返します。ArrayBuffer::lenf64の代わりにi32を返します。IMouseEvent::client_xIMouseEvent::client_yIMouseEvent::movement_xIMouseEvent::movement_yIMouseEvent::screen_xIMouseEvent::screen_yResultを返してください。INode::insert_beforeINode::replace_childINode::clone_nodeStringMap::insertTokenList::addTokenList::removeDocument::create_elementIEventTarget::dispatch_eventFileReader::read_as_textFileReader::read_as_array_bufferFileReader::read_as_textHistory::replace_stateHistory::goHistory::backHistory::forwardLocation::hrefLocation::hashCanvasElement::to_data_urlCanvasElement::to_blobArrayBuffer::newINode::base_uri 、 Option< String >の代わりにStringを返すようになりましたInputElement::raw_valueは、 Valueの代わりにStringを返しますINode::inner_text IHtmlElement::inner_textに移動されましたDocument::query_selectorとDocument::query_selector_all IParentNodeに移動されましたIElement::query_selectorおよびIElement::query_selector_all IParentNodeに移動しましたDocument::get_element_by_id INonElementParentNodeに移動されましたTryFrom / TryIntoを使用して任意の参照様オブジェクト間を変換するためのブランケットは削除されましたcargo-webを使用して建設するときはstdweb::initialize nor stdweb::event_loopに電話する必要はありませんwasm32-unknown-unknownのcdylib箱のサポートXmlHttpRequestWebSocketMutationObserverHistoryTextAreaElementCanvasElementMouseDownEventMouseUpEventMouseMoveEventPopStateEventResizeEventReadyStateChangeSocketCloseEventSocketErrorEventSocketOpenEventSocketMessageEventReferenceTypeとInstanceOfstdweb-derive crateに#[derive(ReferenceType)]を追加します。 stdweb以外でカスタムAPIバインディングを定義することが可能になりました#[js_export] procedural属性( wasm32-unknown-unknownのみ)DomExceptionとサブタイプを追加しますIElementはINodeから継承されますReferenceTypeから継承されますstdweb::traitsモジュールを追加して、すべてのインターフェイス特性をuseためのプレリュードとして機能しますconsole!マクロPartialEqとEqを実装しています0.3
ErrorEventメソッドLoadEvent > ResourceLoadEventAbortEvent > ResourceAbortEventErrorEvent > ResourceErrorEventjs!に通過するためにUnsafeTypedArray追加してください!js!にFnOnce閉鎖を渡すためにOnce追加してください! いずれかの下でライセンスされています
あなたのオプションで。
Mozilla Developer Networkからのドキュメントのスニペットは、バージョン2.5以降のCC-By-SAでカバーされています。
Convributing.mdを参照してください