versa 1.9.0-rc2

Versa types and utilities for developing Versa client applications in Rust
Documentation
use rust_embed::RustEmbed;
use serde_json::Value;

#[derive(RustEmbed)]
#[folder = "src/schema/json/"]
struct SchemaAssets;

pub enum JsonSchemaAccessorError {
  FileError,
  JsonError,
  NetworkError,
}

pub fn access_json_schema_file(
  schema: &str,
  schema_version: &str,
) -> Result<Value, JsonSchemaAccessorError> {
  let safe_version = schema_version.replace('.', "_");
  let filename = format!("{}_v{}.json", schema, safe_version);

  let file_bytes = SchemaAssets::get(&filename).ok_or(JsonSchemaAccessorError::FileError)?;

  let file_content = std::str::from_utf8(file_bytes.data.as_ref())
    .map_err(|_| JsonSchemaAccessorError::FileError)?;

  let json_value: Value =
    serde_json::from_str(file_content).map_err(|_| JsonSchemaAccessorError::JsonError)?;

  Ok(json_value)
}