Skip to content

Commit

Permalink
support wasm build
Browse files Browse the repository at this point in the history
  • Loading branch information
HideBa committed Jan 23, 2025
1 parent 4931325 commit 41946f2
Show file tree
Hide file tree
Showing 33 changed files with 432 additions and 619 deletions.
2 changes: 1 addition & 1 deletion scripts/gen_rust.sh
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
#!/bin/bash
flatc --rust -o ./src/rust/src src/fbs/*.fbs
flatc --rust -o ./src/rust/fcb_core/src/fb src/fbs/*.fbs
3 changes: 3 additions & 0 deletions src/rust/.rust-analyzer
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
exclude = [
"src/rust/fcb_core/src/fb/*",
]
5 changes: 4 additions & 1 deletion src/rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,17 @@ criterion = { version = "0.5.1", features = ["async_tokio", "html_reports"] }
memory-stats = "1.2.0"
pretty_assertions = "1.4.1"
tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] }
rand = "0.8.5"
log = "0.4"

#---WASM dependencies---
getrandom = { version = "0.2.15", features = ["js"] }
gloo-net = "0.6.0"
js-sys = "0.3.77"
wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4.50"
serde-wasm-bindgen = "0.6.5"
console_error_panic_hook = "0.1.7"
log = "0.4"
console_log = "0.2"

[dependencies]
2 changes: 1 addition & 1 deletion src/rust/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2021"

[dependencies]
fcb_core = { path = "../fcb_core", default-features = false }
fcb_core = { path = "../fcb_core" }
clap = { workspace = true }
anyhow = { workspace = true }
serde = { workspace = true }
Expand Down
1 change: 0 additions & 1 deletion src/rust/cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ fn serialize(input: &str, output: &str) -> Result<()> {
index_node_size: 16,
});
let mut fcb = FcbWriter::new(cj, header_options, attr_schema)?;
fcb.write_feature()?;

for feature in features.iter() {
fcb.add_feature(feature)?;
Expand Down
7 changes: 2 additions & 5 deletions src/rust/fcb_core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,5 @@ harness = false
async-trait = { workspace = true }
memory-stats = { workspace = true }
pretty_assertions = { workspace = true }

# [target.'cfg(not(feature = "wasm"))'.dev-dependencies]
# criterion = { workspace = true, features = ["async_tokio", "html_reports"] }
# [target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
# tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
criterion = { workspace = true, features = ["async_tokio", "html_reports"] }
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
1 change: 1 addition & 0 deletions src/rust/fcb_core/benches/read.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ fn read_fcb(path: &str) -> Result<(u64, u64, u64)> {
}

/// Read FCB file and count geometry types
#[allow(dead_code)]
fn read_fcb_as_cj(path: &str) -> Result<(u64, u64, u64)> {
let input_file = File::open(path)?;
let inputreader = BufReader::new(input_file);
Expand Down
1 change: 0 additions & 1 deletion src/rust/fcb_core/src/bin/write.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ fn write_file() -> Result<(), Box<dyn Error>> {
}
}
let mut fcb = FcbWriter::new(cj, header_options, Some(attr_schema))?;
fcb.write_feature()?;
for feature in features.iter() {
fcb.add_feature(feature)?;
}
Expand Down
1 change: 0 additions & 1 deletion src/rust/fcb_core/src/cj_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@ pub fn read_cityjson_from_reader<R: Read>(
/// let test_data = include_str!("../tests/data/small.city.jsonl");
/// let result = read_cityjson(test_data, CJTypeKind::Seq)?;
/// ```
#[cfg(test)]
mod tests {
use std::{fs::File, path::PathBuf};
Expand Down
3 changes: 0 additions & 3 deletions src/rust/fcb_core/src/const_vars.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,3 @@ pub const MAGIC_BYTES_SIZE: usize = 8;

// Size of header size
pub const HEADER_SIZE_SIZE: usize = 4;

// // Offset of header size
// pub(crate) const HEADER_SIZE_OFFSET: usize = MAGIC_BYTES_SIZE + HEADER_SIZE_SIZE;
28 changes: 11 additions & 17 deletions src/rust/fcb_core/src/fb/feature_generated.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

// @generated

use crate::fb::*;
use core::cmp::Ordering;
use core::mem;
use crate::header_generated::*;

extern crate flatbuffers;
use self::flatbuffers::{EndianScalar, Follow};
Expand Down Expand Up @@ -505,12 +503,8 @@ impl flatbuffers::SimpleToVerifyInSlice for GeometryType {}
// struct Vertex, aligned to 4
#[repr(transparent)]
#[derive(Clone, Copy, PartialEq)]
#[derive(Default)]
pub struct Vertex(pub [u8; 12]);
impl Default for Vertex {
fn default() -> Self {
Self([0; 12])
}
}
impl core::fmt::Debug for Vertex {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
f.debug_struct("Vertex")
Expand Down Expand Up @@ -551,7 +545,7 @@ impl<'a> flatbuffers::Verifiable for Vertex {
v: &mut flatbuffers::Verifier,
pos: usize,
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;

v.in_buffer::<Self>(pos)
}
}
Expand Down Expand Up @@ -753,7 +747,7 @@ impl flatbuffers::Verifiable for CityFeature<'_> {
v: &mut flatbuffers::Verifier,
pos: usize,
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;

v.visit_table(pos)?
.visit_field::<flatbuffers::ForwardsUOffset<&str>>("id", Self::VT_ID, true)?
.visit_field::<flatbuffers::ForwardsUOffset<
Expand All @@ -777,7 +771,7 @@ pub struct CityFeatureArgs<'a> {
>,
pub vertices: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, Vertex>>>,
}
impl<'a> Default for CityFeatureArgs<'a> {
impl Default for CityFeatureArgs<'_> {
#[inline]
fn default() -> Self {
CityFeatureArgs {
Expand Down Expand Up @@ -1037,7 +1031,7 @@ impl flatbuffers::Verifiable for CityObject<'_> {
v: &mut flatbuffers::Verifier,
pos: usize,
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;

v.visit_table(pos)?
.visit_field::<CityObjectType>("type_", Self::VT_TYPE_, false)?
.visit_field::<flatbuffers::ForwardsUOffset<&str>>("id", Self::VT_ID, true)?
Expand Down Expand Up @@ -1091,7 +1085,7 @@ pub struct CityObjectArgs<'a> {
flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>,
>,
}
impl<'a> Default for CityObjectArgs<'a> {
impl Default for CityObjectArgs<'_> {
#[inline]
fn default() -> Self {
CityObjectArgs {
Expand Down Expand Up @@ -1409,7 +1403,7 @@ impl flatbuffers::Verifiable for Geometry<'_> {
v: &mut flatbuffers::Verifier,
pos: usize,
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;

v.visit_table(pos)?
.visit_field::<GeometryType>("type_", Self::VT_TYPE_, false)?
.visit_field::<flatbuffers::ForwardsUOffset<&str>>("lod", Self::VT_LOD, false)?
Expand Down Expand Up @@ -1465,7 +1459,7 @@ pub struct GeometryArgs<'a> {
>,
>,
}
impl<'a> Default for GeometryArgs<'a> {
impl Default for GeometryArgs<'_> {
#[inline]
fn default() -> Self {
GeometryArgs {
Expand Down Expand Up @@ -1676,7 +1670,7 @@ impl flatbuffers::Verifiable for SemanticObject<'_> {
v: &mut flatbuffers::Verifier,
pos: usize,
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;

v.visit_table(pos)?
.visit_field::<SemanticSurfaceType>("type_", Self::VT_TYPE_, false)?
.visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, u8>>>(
Expand All @@ -1700,7 +1694,7 @@ pub struct SemanticObjectArgs<'a> {
pub children: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, u32>>>,
pub parent: Option<u32>,
}
impl<'a> Default for SemanticObjectArgs<'a> {
impl Default for SemanticObjectArgs<'_> {
#[inline]
fn default() -> Self {
SemanticObjectArgs {
Expand Down
26 changes: 10 additions & 16 deletions src/rust/fcb_core/src/fb/header_generated.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

// @generated

use core::cmp::Ordering;
use core::mem;

extern crate flatbuffers;
use self::flatbuffers::{EndianScalar, Follow};
Expand Down Expand Up @@ -158,12 +156,8 @@ impl flatbuffers::SimpleToVerifyInSlice for ColumnType {}
// struct Vector, aligned to 8
#[repr(transparent)]
#[derive(Clone, Copy, PartialEq)]
#[derive(Default)]
pub struct Vector(pub [u8; 24]);
impl Default for Vector {
fn default() -> Self {
Self([0; 24])
}
}
impl core::fmt::Debug for Vector {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
f.debug_struct("Vector")
Expand Down Expand Up @@ -204,7 +198,7 @@ impl<'a> flatbuffers::Verifiable for Vector {
v: &mut flatbuffers::Verifier,
pos: usize,
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;

v.in_buffer::<Self>(pos)
}
}
Expand Down Expand Up @@ -356,7 +350,7 @@ impl<'a> flatbuffers::Verifiable for Transform {
v: &mut flatbuffers::Verifier,
pos: usize,
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;

v.in_buffer::<Self>(pos)
}
}
Expand Down Expand Up @@ -446,7 +440,7 @@ impl<'a> flatbuffers::Verifiable for GeographicalExtent {
v: &mut flatbuffers::Verifier,
pos: usize,
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;

v.in_buffer::<Self>(pos)
}
}
Expand Down Expand Up @@ -665,7 +659,7 @@ impl flatbuffers::Verifiable for Column<'_> {
v: &mut flatbuffers::Verifier,
pos: usize,
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;

v.visit_table(pos)?
.visit_field::<u16>("index", Self::VT_INDEX, false)?
.visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, true)?
Expand Down Expand Up @@ -703,7 +697,7 @@ pub struct ColumnArgs<'a> {
pub primary_key: bool,
pub metadata: Option<flatbuffers::WIPOffset<&'a str>>,
}
impl<'a> Default for ColumnArgs<'a> {
impl Default for ColumnArgs<'_> {
#[inline]
fn default() -> Self {
ColumnArgs {
Expand Down Expand Up @@ -907,7 +901,7 @@ impl flatbuffers::Verifiable for ReferenceSystem<'_> {
v: &mut flatbuffers::Verifier,
pos: usize,
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;

v.visit_table(pos)?
.visit_field::<flatbuffers::ForwardsUOffset<&str>>(
"authority",
Expand All @@ -931,7 +925,7 @@ pub struct ReferenceSystemArgs<'a> {
pub code: i32,
pub code_string: Option<flatbuffers::WIPOffset<&'a str>>,
}
impl<'a> Default for ReferenceSystemArgs<'a> {
impl Default for ReferenceSystemArgs<'_> {
#[inline]
fn default() -> Self {
ReferenceSystemArgs {
Expand Down Expand Up @@ -1356,7 +1350,7 @@ impl flatbuffers::Verifiable for Header<'_> {
v: &mut flatbuffers::Verifier,
pos: usize,
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;

v.visit_table(pos)?
.visit_field::<Transform>("transform", Self::VT_TRANSFORM, false)?
.visit_field::<flatbuffers::ForwardsUOffset<
Expand Down Expand Up @@ -1476,7 +1470,7 @@ pub struct HeaderArgs<'a> {
pub attributes: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, u8>>>,
pub version: Option<flatbuffers::WIPOffset<&'a str>>,
}
impl<'a> Default for HeaderArgs<'a> {
impl Default for HeaderArgs<'_> {
#[inline]
fn default() -> Self {
HeaderArgs {
Expand Down
10 changes: 3 additions & 7 deletions src/rust/fcb_core/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
#![allow(clippy::manual_range_contains)]

mod cj_utils;
pub mod const_vars;
mod const_vars;
mod error;
mod fb;
#[allow(dead_code, unused_imports, clippy::all, warnings)]
Expand All @@ -14,16 +12,14 @@ mod writer;

pub use cj_utils::*;
pub use const_vars::*;
// pub use fb as fb_generated;
pub use fb::*;
pub use reader::*;
pub use writer::*;

#[cfg(feature = "http")]
#[cfg(feature = "wasm")]
pub use http_reader::*;

pub use reader::*;
pub use writer::*;

pub fn check_magic_bytes(bytes: &[u8]) -> bool {
bytes[0..3] == MAGIC_BYTES[0..3] && bytes[4..7] == MAGIC_BYTES[4..7] && bytes[3] <= VERSION
}
2 changes: 1 addition & 1 deletion src/rust/fcb_core/src/reader/deserializer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ pub(crate) fn to_cj_co_type(co_type: CityObjectType) -> String {
}
}

pub fn decode_attributes(
pub(crate) fn decode_attributes(
columns: flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<Column<'_>>>,
attributes: flatbuffers::Vector<'_, u8>,
) -> serde_json::Value {
Expand Down
8 changes: 5 additions & 3 deletions src/rust/fcb_core/src/reader/geom_decoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ struct PartLists<'a> {
/// # Returns
///
/// The reconstructed CityJSON boundaries structure
pub fn decode(
pub(crate) fn decode(
solids: &[u32],
shells: &[u32],
surfaces: &[u32],
Expand Down Expand Up @@ -164,7 +164,9 @@ pub fn decode(
/// # Returns
///
/// Vector of CityJSON semantic surface definitions
pub fn decode_semantics_surfaces(semantics_objects: &[SemanticObject]) -> Vec<SemanticsSurface> {
pub(crate) fn decode_semantics_surfaces(
semantics_objects: &[SemanticObject],
) -> Vec<SemanticsSurface> {
let surfaces = semantics_objects.iter().map(|s| {
let surface_type_str = match s.type_() {
SemanticSurfaceType::RoofSurface => "RoofSurface",
Expand Down Expand Up @@ -310,7 +312,7 @@ fn decode_semantics_(
/// # Returns
///
/// Complete CityJSON semantics structure with surfaces and values
pub fn decode_semantics(
pub(crate) fn decode_semantics(
solids: &[u32],
shells: &[u32],
geometry_type: GeometryType,
Expand Down
Loading

0 comments on commit 41946f2

Please sign in to comment.