Skip to content

Commit 01727fa

Browse files
psteinroeclaude
andauthored
feat(wasm): generate and export schema cache types (#686)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 3253db3 commit 01727fa

25 files changed

Lines changed: 349 additions & 75 deletions

Cargo.lock

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/pgls_schema_cache/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ version = "0.0.0"
1414
default = ["db"]
1515
# Enable serde serialization/deserialization for all types (needed for WASM)
1616
serde = []
17+
# Enable schemars JsonSchema derive for schema generation/codegen
18+
schema = ["dep:schemars"]
1719
# Enable database connectivity (sqlx, async-std, tokio, futures-util)
1820
# Disable this feature for WASM builds
1921
db = ["dep:sqlx", "dep:async-std", "dep:futures-util", "dep:tokio"]
@@ -24,6 +26,7 @@ async-std = { version = "1.12.0", optional = true }
2426
futures-util = { version = "0.3.31", optional = true }
2527
pgls_console.workspace = true
2628
pgls_diagnostics.workspace = true
29+
schemars = { workspace = true, optional = true }
2730
serde = { workspace = true, features = ["derive"] }
2831
serde_json.workspace = true
2932
sqlx = { workspace = true, optional = true }

crates/pgls_schema_cache/src/columns.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize};
44
use crate::schema_cache::SchemaCacheItem;
55

66
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
78
pub enum ColumnClassKind {
89
OrdinaryTable,
910
View,
@@ -40,6 +41,7 @@ impl From<char> for ColumnClassKind {
4041
}
4142

4243
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
44+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
4345
pub struct Column {
4446
pub name: String,
4547

@@ -69,6 +71,7 @@ pub struct Column {
6971
}
7072

7173
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
74+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
7275
pub struct ForeignKeyReference {
7376
pub schema: Option<String>,
7477
pub table: String,

crates/pgls_schema_cache/src/extensions.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use sqlx::PgPool;
66
use crate::schema_cache::SchemaCacheItem;
77

88
#[derive(Debug, Default, Serialize, Deserialize)]
9+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
910
pub struct Extension {
1011
pub name: String,
1112
pub schema: Option<String>,

crates/pgls_schema_cache/src/functions.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use sqlx::PgPool;
77
use crate::schema_cache::SchemaCacheItem;
88

99
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
10+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
1011
pub enum ProcKind {
1112
#[default]
1213
Function,
@@ -35,6 +36,7 @@ impl From<i8> for ProcKind {
3536

3637
/// `Behavior` describes the characteristics of the function. Is it deterministic? Does it changed due to side effects, and if so, when?
3738
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
39+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
3840
pub enum Behavior {
3941
/// The function is a pure function (same input leads to same output.)
4042
Immutable,
@@ -62,6 +64,7 @@ impl From<Option<String>> for Behavior {
6264
}
6365

6466
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
67+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
6568
pub struct FunctionArg {
6669
/// `in`, `out`, or `inout`.
6770
pub mode: String,
@@ -75,6 +78,7 @@ pub struct FunctionArg {
7578
}
7679

7780
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
81+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
7882
pub struct FunctionArgs {
7983
pub args: Vec<FunctionArg>,
8084
}
@@ -88,6 +92,7 @@ impl From<Option<JsonValue>> for FunctionArgs {
8892
}
8993

9094
#[derive(Debug, Default, Serialize, Deserialize)]
95+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
9196
pub struct Function {
9297
/// The Id (`oid`).
9398
pub id: i64,

crates/pgls_schema_cache/src/indexes.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use crate::schema_cache::SchemaCacheItem;
77
use serde::{Deserialize, Serialize};
88

99
#[derive(Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
10+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
1011
pub struct Index {
1112
pub id: i64,
1213
pub schema: String,

crates/pgls_schema_cache/src/policies.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize};
44
use crate::schema_cache::SchemaCacheItem;
55

66
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
78
pub enum PolicyCommand {
89
Select,
910
Insert,
@@ -58,6 +59,7 @@ impl From<PolicyQueried> for Policy {
5859
}
5960

6061
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
62+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
6163
pub struct Policy {
6264
pub name: String,
6365
pub table_name: String,

crates/pgls_schema_cache/src/roles.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize};
44
use crate::schema_cache::SchemaCacheItem;
55

66
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
7+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
78
pub struct Role {
89
pub name: String,
910
pub is_super_user: bool,

crates/pgls_schema_cache/src/schema_cache.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use crate::versions::Version;
1414
use crate::{Extension, Role, Trigger};
1515

1616
#[derive(Debug, Default, Serialize, Deserialize)]
17+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
1718
#[serde(default)]
1819
pub struct SchemaCache {
1920
pub schemas: Vec<Schema>,

crates/pgls_schema_cache/src/schemas.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use sqlx::PgPool;
66
use crate::schema_cache::SchemaCacheItem;
77

88
#[derive(Debug, Default, Serialize, Deserialize)]
9+
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
910
pub struct Schema {
1011
pub id: i64,
1112
pub name: String,

0 commit comments

Comments
 (0)