// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ // ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ // ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ // ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ // ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ // ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ // ┃ Copyright (c) 2017, the Perspective Authors. ┃ // ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ // ┃ This file is part of the Perspective library, distributed under the terms ┃ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ #![recursion_limit = "1024"] //! This module generates metadata for other crates: //! //! - `perspective-client` //! - Add `protobuf-src` dependency //! - Generate `proto.rs` protobuf client bindings. //! - `perspective-js` //! - TypeScript types //! - Recurisvely set external proto on `perspective-client` //! - `perspective-server` //! - Copy `cpp` and `cmake` to local root //! //! The `metadata` binary must be run for these assets to be updated in //! your local dev tree! use std::error::Error; use std::fmt::Write; use std::fs; use perspective_client::config::*; use perspective_client::{ ColumnWindow, DeleteOptions, JoinOptions, OnUpdateData, OnUpdateOptions, SystemInfo, TableInitOptions, UpdateOptions, ViewWindow, }; use perspective_js::TypedArrayWindow; use perspective_viewer::config::{PluginStaticConfig, ViewerConfig, ViewerConfigUpdate}; use ts_rs::TS; pub fn generate_type_bindings_viewer() -> Result<(), Box> { let path = std::env::current_dir()?.join("../perspective-viewer/src/ts/ts-rs"); ViewerConfigUpdate::export_all_to(&path)?; ViewerConfig::::export_all_to(&path)?; PluginStaticConfig::export_all_to(&path)?; OnUpdateData::export_all_to(&path)?; Ok(()) } fn generate_exprtk_docs() -> Result<(), Box> { let mut txt = "
\n\n# Perspective ExprTK Extensions\n\n".to_string(); for rec in perspective_client::config::COMPLETIONS { writeln!( txt, "- `{}` {}", rec.insert_text, rec.documentation.replace("\n", " "), )?; } fs::create_dir_all("../perspective-client/docs/")?; fs::write("../perspective-client/docs/expression_gen.md", txt)?; Ok(()) } #[doc(hidden)] pub fn generate_type_bindings_js() -> Result<(), Box> { let path = std::env::current_dir()?.join("../perspective-js/src/ts/ts-rs"); ColumnType::export_all_to(&path)?; ColumnWindow::export_all_to(&path)?; DeleteOptions::export_all_to(&path)?; JoinOptions::export_all_to(&path)?; OnUpdateData::export_all_to(&path)?; OnUpdateOptions::export_all_to(&path)?; SystemInfo::::export_all_to(&path)?; TableInitOptions::export_all_to(&path)?; TypedArrayWindow::export_all_to(&path)?; UpdateOptions::export_all_to(&path)?; ViewConfig::export_all_to(&path)?; ViewConfigUpdate::export_all_to(&path)?; ViewWindow::export_all_to(&path)?; ViewWindow::export_all_to(&path)?; Ok(()) } #[doc(hidden)] pub fn generate_python_cargo_licenses() -> Result<(), Box> { use std::fs::File; use std::process::{Command, Stdio}; let python_dir = std::env::current_dir()?.join("../perspective-python"); let bundler = env!("CARGO_BIN_FILE_CARGO_BUNDLE_LICENSES_cargo-bundle-licenses"); let license_file = File::create(python_dir.join("LICENSE_THIRDPARTY_cargo.yml"))?; Command::new(bundler) .arg("--format=yaml") .current_dir(python_dir) .stdout(Stdio::from(license_file)) .spawn()? .wait()?; Ok(()) } fn main() -> Result<(), Box> { generate_type_bindings_js()?; generate_type_bindings_viewer()?; generate_exprtk_docs()?; generate_python_cargo_licenses()?; Ok(()) }