Target OS

The --target-os argument is an optional command line argument that allows you to specify a list of comma separated target_os values. In your Rust source code you can use the target_os attribute to restrict a type, variant or fields.

If you do not use --target-os then typeshare will generate all types, variants and fields that are typeshared.

Example

./typeshare ./my_rust_project \
  --lang=typescript \
  --output-file=my_typescript_definitions.ts \
  --target-os=linux,macos

The example above is stating any types, variants, fields that are typeshared and are not applicable for linux or macos will be omitted from typeshare type generation.

Supported target_os definitions.

Simple standalone.

#![allow(unused)]
fn main() {
#[cfg(target_os = "android")]
pub struct MyType;
}

This type will only be generated if --target-os has android in the list of target_os values.

Simple not rule

#![allow(unused)]
fn main() {
#[cfg(not(target_os = "android"))]
pub struct MyType;
}

This type will only be generated if --target-os does not include android in the list of target_os values.

Multiple not any rule

#![allow(unused)]
fn main() {
#[cfg(not(any(target_os = "android", target_os = "ios")))]
pub struct MyType;
}

This type will only be generated if --target-os does not include android or ios in the list of target_os values.

The following example will allow MyType to be typeshared.

./typeshare ./my_rust_project \
  --lang=typescript \
  --output-file=my_typescript_definitions.ts \
  --target-os=linux,macos

The following example will not allow MyType to be typeshared.

./typeshare ./my_rust_project \
  --lang=typescript \
  --output-file=my_typescript_definitions.ts \
  --target-os=android,macos

Combined with features or other cfg attributes

Typehsare will not take into consideration any other cfg attributes other than target_os when generating types.

For example:

#![allow(unused)]
fn main() {
#[cfg(any(target_os = "android", feature = "android-test")]
pub struct MyType;
}
#![allow(unused)]
fn main() {
#[cfg(all(target_os = "android", feature = "android-test")]
pub struct MyType;
}
./typeshare ./my_rust_project \
  --lang=typescript \
  --output-file=my_typescript_definitions.ts \
  --target-os=android

In both examples above, MyType will be typeshared.