Module icu_provider_fs::export
source · [−]Expand description
Utilities for dumping data to an ICU4X filesystem tree.
The export
feature enables you to pull all data from some other data provider and persist it
on the filesystem to be read by an FsDataProvider at runtime.
For a command-line user interface, see the icu_datagen
crate.
Examples
use icu_provider::export::DataExporter;
use icu_provider::prelude::*;
use icu_provider::hello_world::*;
use icu_provider_fs::FsDataProvider;
use icu_provider_fs::export::fs_exporter;
use icu_provider_fs::export::serializers;
use std::borrow::Cow;
use std::path::PathBuf;
let demo_path = std::env::temp_dir().join("icu4x_json_demo");
// Set up the exporter
let mut options = serializers::json::Options::default();
let serializer = Box::new(serializers::json::Serializer::new(options));
let mut options = fs_exporter::ExporterOptions::default();
options.root = demo_path.clone();
let mut exporter = fs_exporter::FilesystemExporter::try_new(serializer, options)
.expect("Should successfully initialize data output directory");
// Export something
let payload = DataPayload::<HelloWorldV1Marker>::from_owned(
HelloWorldV1 { message: Cow::Borrowed("Hi") }
);
let result = exporter.put_payload(
HelloWorldV1Marker::KEY,
Default::default(),
payload.clone().into_serializable())
.expect("Should successfully export");
// Create a filesystem provider reading from the demo directory
let provider = FsDataProvider::try_new(demo_path.clone())
.expect("Should successfully read from filesystem");
// Read the key from the filesystem and ensure it is as expected
let req = DataRequest {
options: Default::default(),
metadata: Default::default(),
};
let response: DataPayload<HelloWorldV1Marker> =
provider.load_resource(&req).unwrap().take_payload().unwrap();
assert_eq!(
response.get(),
payload.get(),
);
// Clean up from demo
std::fs::remove_dir_all(&demo_path).expect("Should clean up test directory");
Re-exports
pub use fs_exporter::FilesystemExporter;