Allow opting out of building default wasm bindings
This commit is contained in:
parent
e78d06289a
commit
5a53574366
|
@ -7,6 +7,10 @@ edition = "2018"
|
||||||
[lib]
|
[lib]
|
||||||
crate-type = ["lib", "cdylib"]
|
crate-type = ["lib", "cdylib"]
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["wasm"]
|
||||||
|
wasm = [] # Build default wasm bindings
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0.44"
|
anyhow = "1.0.44"
|
||||||
csv = "1.1.6"
|
csv = "1.1.6"
|
||||||
|
|
|
@ -50,5 +50,5 @@ use wasm_bindgen::prelude::wasm_bindgen;
|
||||||
pub const VERSION: &str = git_version!(args=["--always", "--dirty=-dev"], fallback="unknown");
|
pub const VERSION: &str = git_version!(args=["--always", "--dirty=-dev"], fallback="unknown");
|
||||||
|
|
||||||
/// Get [VERSION] as a String (for WebAssembly)
|
/// Get [VERSION] as a String (for WebAssembly)
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
pub fn version() -> String { VERSION.to_string() }
|
pub fn version() -> String { VERSION.to_string() }
|
||||||
|
|
|
@ -38,6 +38,7 @@ use crate::ties::{self, TieStrategy};
|
||||||
use derive_builder::Builder;
|
use derive_builder::Builder;
|
||||||
use derive_more::Constructor;
|
use derive_more::Constructor;
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
#[allow(unused_imports)]
|
||||||
use wasm_bindgen::prelude::wasm_bindgen;
|
use wasm_bindgen::prelude::wasm_bindgen;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
@ -229,7 +230,7 @@ impl STVOptions {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Enum of options for [STVOptions::sum_surplus_transfers]
|
/// Enum of options for [STVOptions::sum_surplus_transfers]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
pub enum SumSurplusTransfersMode {
|
pub enum SumSurplusTransfersMode {
|
||||||
|
@ -260,7 +261,7 @@ impl<S: AsRef<str>> From<S> for SumSurplusTransfersMode {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Enum of options for [STVOptions::quota]
|
/// Enum of options for [STVOptions::quota]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
pub enum QuotaType {
|
pub enum QuotaType {
|
||||||
|
@ -299,7 +300,7 @@ impl<S: AsRef<str>> From<S> for QuotaType {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Enum of options for [STVOptions::quota_criterion]
|
/// Enum of options for [STVOptions::quota_criterion]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
pub enum QuotaCriterion {
|
pub enum QuotaCriterion {
|
||||||
|
@ -330,7 +331,7 @@ impl<S: AsRef<str>> From<S> for QuotaCriterion {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Enum of options for [STVOptions::quota_mode]
|
/// Enum of options for [STVOptions::quota_mode]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
pub enum QuotaMode {
|
pub enum QuotaMode {
|
||||||
|
@ -373,7 +374,7 @@ impl<S: AsRef<str>> From<S> for QuotaMode {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Enum of options for [STVOptions::surplus]
|
/// Enum of options for [STVOptions::surplus]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
pub enum SurplusMethod {
|
pub enum SurplusMethod {
|
||||||
|
@ -429,7 +430,7 @@ impl<S: AsRef<str>> From<S> for SurplusMethod {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Enum of options for [STVOptions::surplus_order]
|
/// Enum of options for [STVOptions::surplus_order]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
pub enum SurplusOrder {
|
pub enum SurplusOrder {
|
||||||
|
@ -460,7 +461,7 @@ impl<S: AsRef<str>> From<S> for SurplusOrder {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Enum of options for [STVOptions::exclusion]
|
/// Enum of options for [STVOptions::exclusion]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
pub enum ExclusionMethod {
|
pub enum ExclusionMethod {
|
||||||
|
@ -503,7 +504,7 @@ impl<S: AsRef<str>> From<S> for ExclusionMethod {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Enum of options for [STVOptions::sample]
|
/// Enum of options for [STVOptions::sample]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
pub enum SampleMethod {
|
pub enum SampleMethod {
|
||||||
|
|
|
@ -50,13 +50,13 @@ macro_rules! wasm_error {
|
||||||
// Init
|
// Init
|
||||||
|
|
||||||
/// Wrapper for [Fixed::set_dps]
|
/// Wrapper for [Fixed::set_dps]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
pub fn fixed_set_dps(dps: usize) {
|
pub fn fixed_set_dps(dps: usize) {
|
||||||
Fixed::set_dps(dps);
|
Fixed::set_dps(dps);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wrapper for [GuardedFixed::set_dps]
|
/// Wrapper for [GuardedFixed::set_dps]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
pub fn gfixed_set_dps(dps: usize) {
|
pub fn gfixed_set_dps(dps: usize) {
|
||||||
GuardedFixed::set_dps(dps);
|
GuardedFixed::set_dps(dps);
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ macro_rules! impl_type {
|
||||||
// Counting
|
// Counting
|
||||||
|
|
||||||
/// Wrapper for [blt::parse_iterator]
|
/// Wrapper for [blt::parse_iterator]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn [<election_from_blt_$type>](text: String) -> [<Election$type>] {
|
pub fn [<election_from_blt_$type>](text: String) -> [<Election$type>] {
|
||||||
// Install panic! hook
|
// Install panic! hook
|
||||||
|
@ -82,21 +82,21 @@ macro_rules! impl_type {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Call [Constraints::from_con] and set [Election::constraints]
|
/// Call [Constraints::from_con] and set [Election::constraints]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn [<election_load_constraints_$type>](election: &mut [<Election$type>], text: String) {
|
pub fn [<election_load_constraints_$type>](election: &mut [<Election$type>], text: String) {
|
||||||
election.0.constraints = Some(Constraints::from_con(text.lines().map(|s| s.to_string()).into_iter()));
|
election.0.constraints = Some(Constraints::from_con(text.lines().map(|s| s.to_string()).into_iter()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wrapper for [stv::preprocess_election]
|
/// Wrapper for [stv::preprocess_election]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn [<preprocess_election_$type>](election: &mut [<Election$type>], opts: &STVOptions) {
|
pub fn [<preprocess_election_$type>](election: &mut [<Election$type>], opts: &STVOptions) {
|
||||||
stv::preprocess_election(&mut election.0, &opts.0);
|
stv::preprocess_election(&mut election.0, &opts.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wrapper for [stv::count_init]
|
/// Wrapper for [stv::count_init]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn [<count_init_$type>](state: &mut [<CountState$type>], opts: &STVOptions) {
|
pub fn [<count_init_$type>](state: &mut [<CountState$type>], opts: &STVOptions) {
|
||||||
match stv::count_init(&mut state.0, opts.as_static()) {
|
match stv::count_init(&mut state.0, opts.as_static()) {
|
||||||
|
@ -106,7 +106,7 @@ macro_rules! impl_type {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wrapper for [stv::count_one_stage]
|
/// Wrapper for [stv::count_one_stage]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn [<count_one_stage_$type>](state: &mut [<CountState$type>], opts: &STVOptions) -> bool {
|
pub fn [<count_one_stage_$type>](state: &mut [<CountState$type>], opts: &STVOptions) -> bool {
|
||||||
match stv::count_one_stage::<[<$type>]>(&mut state.0, &opts.0) {
|
match stv::count_one_stage::<[<$type>]>(&mut state.0, &opts.0) {
|
||||||
|
@ -118,42 +118,42 @@ macro_rules! impl_type {
|
||||||
// Reporting
|
// Reporting
|
||||||
|
|
||||||
/// Wrapper for [init_results_table]
|
/// Wrapper for [init_results_table]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn [<init_results_table_$type>](election: &[<Election$type>], opts: &STVOptions, report_style: &str) -> String {
|
pub fn [<init_results_table_$type>](election: &[<Election$type>], opts: &STVOptions, report_style: &str) -> String {
|
||||||
return init_results_table(&election.0, &opts.0, report_style);
|
return init_results_table(&election.0, &opts.0, report_style);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wrapper for [describe_count]
|
/// Wrapper for [describe_count]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn [<describe_count_$type>](filename: String, election: &[<Election$type>], opts: &STVOptions) -> String {
|
pub fn [<describe_count_$type>](filename: String, election: &[<Election$type>], opts: &STVOptions) -> String {
|
||||||
return describe_count(filename, &election.0, &opts.0);
|
return describe_count(filename, &election.0, &opts.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wrapper for [update_results_table]
|
/// Wrapper for [update_results_table]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn [<update_results_table_$type>](stage_num: usize, state: &[<CountState$type>], opts: &STVOptions, report_style: &str) -> Array {
|
pub fn [<update_results_table_$type>](stage_num: usize, state: &[<CountState$type>], opts: &STVOptions, report_style: &str) -> Array {
|
||||||
return update_results_table(stage_num, &state.0, &opts.0, report_style);
|
return update_results_table(stage_num, &state.0, &opts.0, report_style);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wrapper for [update_stage_comments]
|
/// Wrapper for [update_stage_comments]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn [<update_stage_comments_$type>](state: &[<CountState$type>], stage_num: usize) -> String {
|
pub fn [<update_stage_comments_$type>](state: &[<CountState$type>], stage_num: usize) -> String {
|
||||||
return update_stage_comments(&state.0, stage_num);
|
return update_stage_comments(&state.0, stage_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wrapper for [finalise_results_table]
|
/// Wrapper for [finalise_results_table]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn [<finalise_results_table_$type>](state: &[<CountState$type>], report_style: &str) -> Array {
|
pub fn [<finalise_results_table_$type>](state: &[<CountState$type>], report_style: &str) -> Array {
|
||||||
return finalise_results_table(&state.0, report_style);
|
return finalise_results_table(&state.0, report_style);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wrapper for [final_result_summary]
|
/// Wrapper for [final_result_summary]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn [<final_result_summary_$type>](state: &[<CountState$type>], opts: &STVOptions) -> String {
|
pub fn [<final_result_summary_$type>](state: &[<CountState$type>], opts: &STVOptions) -> String {
|
||||||
return final_result_summary(&state.0, &opts.0);
|
return final_result_summary(&state.0, &opts.0);
|
||||||
|
@ -165,9 +165,9 @@ macro_rules! impl_type {
|
||||||
///
|
///
|
||||||
/// This is required as `&'static` cannot be specified in wasm-bindgen: see [issue 1187](https://github.com/rustwasm/wasm-bindgen/issues/1187).
|
/// This is required as `&'static` cannot be specified in wasm-bindgen: see [issue 1187](https://github.com/rustwasm/wasm-bindgen/issues/1187).
|
||||||
///
|
///
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
pub struct [<CountState$type>](CountState<'static, $type>);
|
pub struct [<CountState$type>](CountState<'static, $type>);
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
impl [<CountState$type>] {
|
impl [<CountState$type>] {
|
||||||
/// Create a new [CountState] wrapper
|
/// Create a new [CountState] wrapper
|
||||||
pub fn new(election: &[<Election$type>]) -> Self {
|
pub fn new(election: &[<Election$type>]) -> Self {
|
||||||
|
@ -187,9 +187,9 @@ macro_rules! impl_type {
|
||||||
///
|
///
|
||||||
/// This is required as `&'static` cannot be specified in wasm-bindgen: see [issue 1187](https://github.com/rustwasm/wasm-bindgen/issues/1187).
|
/// This is required as `&'static` cannot be specified in wasm-bindgen: see [issue 1187](https://github.com/rustwasm/wasm-bindgen/issues/1187).
|
||||||
///
|
///
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
pub struct [<Election$type>](Election<$type>);
|
pub struct [<Election$type>](Election<$type>);
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
impl [<Election$type>] {
|
impl [<Election$type>] {
|
||||||
/// Return [Election::seats]
|
/// Return [Election::seats]
|
||||||
pub fn seats(&self) -> usize { self.0.seats }
|
pub fn seats(&self) -> usize { self.0.seats }
|
||||||
|
@ -215,10 +215,10 @@ impl_type!(NativeFloat64);
|
||||||
impl_type!(Rational);
|
impl_type!(Rational);
|
||||||
|
|
||||||
/// Wrapper for [stv::STVOptions]
|
/// Wrapper for [stv::STVOptions]
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
pub struct STVOptions(stv::STVOptions);
|
pub struct STVOptions(stv::STVOptions);
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||||
impl STVOptions {
|
impl STVOptions {
|
||||||
/// Wrapper for [stv::STVOptions::new]
|
/// Wrapper for [stv::STVOptions::new]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
|
|
Loading…
Reference in New Issue