合并最新 master 分支
带入 SpacetimeDB 2.7.0(hotfix3)工具链升级、后台灰度发布控制面恢复、 精选顺序分列瀑布流及后台素材预览统一。冲突仅三处文档:decision-log 与 pitfalls 双方条目并存,运维文档更新时间取新值。BgFilter 分支代码与部署 脚本零冲突;依赖升级后 bgfilter 46 测试全过。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Generated
+28
-28
@@ -5348,9 +5348,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b6eff5017248ff2e35e03564df947fdf3e963f7198be6ae1d9e894c2efb2ea15"
|
||||
checksum = "f8ba4d29856a75aafc3c66fd47d39e11e20c5001ee323d90549ffe19980ef9ff"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytemuck",
|
||||
@@ -5371,9 +5371,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-bindings-macro"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fce86c7657dcb42a33ce55f0100f98964dc15b64e79f06803a478676b74d6c82"
|
||||
checksum = "4a9c2548accd66ba0444caf12916e60ca282054fe5701298f633aa6a2a90c38b"
|
||||
dependencies = [
|
||||
"heck 0.4.1",
|
||||
"humantime",
|
||||
@@ -5385,18 +5385,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-bindings-sys"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dbe5f9d71d59bdb93d81a7a61eee75ac2f1f88f91e139a7e263261f9dbf316de"
|
||||
checksum = "2fc1790a7705a2d83ee601c9b14e4fd543ee8fe777d5b6117d4c5d33fc6566d7"
|
||||
dependencies = [
|
||||
"spacetimedb-primitives",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-client-api-messages"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1642404553853b56e521a12aa9849807d8e003433934c73eeebbc8671f1254f8"
|
||||
checksum = "e2ef1840b2157a9487618ad360a078d7b5d86de5eb27494efa5bbbb2ca76b247"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"bytestring",
|
||||
@@ -5416,9 +5416,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-data-structures"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3407c90a3da48b1c421bbad6a2ee6de3855a77d73fae98773bcc058426f1318f"
|
||||
checksum = "20df758e7067fb085e9393786b3b12289838eac9fd78601cb1aaf7e059904ccb"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"crossbeam-queue",
|
||||
@@ -5431,9 +5431,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-lib"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bceaf72bdbf1a624d55d17ebaa38f8cf78a4972e43641c6cbf94f82318b5581d"
|
||||
checksum = "7a6b0417d7db37d991fd927a21298e09ad61cd5dc298eb9e1ac2433fe4a958a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bitflags 2.13.0",
|
||||
@@ -5456,9 +5456,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-memory-usage"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6cc1e19f664b47f4b3b82fb69b2fc096c3d82dc659ea705d62bbbec2fa9c2e83"
|
||||
checksum = "892d4ef38414498d687d765c4b0a9f6390f786c6fc5ca640a09c42f5da902f99"
|
||||
dependencies = [
|
||||
"decorum",
|
||||
"ethnum",
|
||||
@@ -5466,9 +5466,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-metrics"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c794455ed96245d52d837c8bbc3493d1c17d9f6382e6c5fee1c88926c9aa04a"
|
||||
checksum = "de1ef3c1d55ec819953211e5ae645f1152e2b894ea770d59b039a7133b2ebf5f"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"itertools 0.12.1",
|
||||
@@ -5478,9 +5478,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-primitives"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b7525fda46b21fffdc62805099dee853a79000e0673ff6df4b8355cb0b8dabe8"
|
||||
checksum = "2adee8bd225009feb67ab329aa4eae6b7fe6c4c0165d9d65814c07a4252b2d20"
|
||||
dependencies = [
|
||||
"bitflags 2.13.0",
|
||||
"either",
|
||||
@@ -5492,18 +5492,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-query-builder"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1f283c4797961d9a94f623ee4c66e6a94d30861b6380a49a27ac2d9568e17125"
|
||||
checksum = "1d8476efc6c3c1d9def4499bbeedcc015d5f13c75565dd7136180265dd45708c"
|
||||
dependencies = [
|
||||
"spacetimedb-lib",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-sats"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6cefb87b7d5e760d43cb65855591e25af772bdcca19562e5796ae797240d1998"
|
||||
checksum = "a6cfd92de752a8fd711ad2138ae79a80313be34061da6112fd46df1dd6365200"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arrayvec",
|
||||
@@ -5534,9 +5534,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-schema"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "775cfdeb406e5628bf78b2221b0e0fd2fcba583f691bb89ba1c9338790ecaf7d"
|
||||
checksum = "444649a34ca14d1535d03a375deacb8ad4668f692576bff7091b6d4160b1d346"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"convert_case 0.6.0",
|
||||
@@ -5565,9 +5565,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-sdk"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "074a6d8828638176eb8e9bba7a3e6fb75dc659b260717306eb966c7e10575cd7"
|
||||
checksum = "ed0e49e45ab4828e9bf51d1c93db553f496c2836f1b49174f4019dc8c42e6525"
|
||||
dependencies = [
|
||||
"anymap3",
|
||||
"base64 0.21.7",
|
||||
@@ -5597,9 +5597,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "spacetimedb-sql-parser"
|
||||
version = "2.6.1"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3b978b6d76cfbe5782a7f0dae7e25f6be4e7e13cfad26c9211d4eb4cdf8c22da"
|
||||
checksum = "2b9908b30e69222970fd955e30235fe977c8fa12010d630949c77f603abf54a2"
|
||||
dependencies = [
|
||||
"derive_more",
|
||||
"spacetimedb-lib",
|
||||
|
||||
@@ -116,9 +116,9 @@ serde_urlencoded = "0.7"
|
||||
sha1 = "0.10"
|
||||
sha2 = "0.10"
|
||||
socket2 = "0.6"
|
||||
spacetimedb = "=2.6.1"
|
||||
spacetimedb-sdk = "=2.6.1"
|
||||
spacetimedb-lib = { version = "=2.6.1", default-features = false }
|
||||
spacetimedb = "=2.7.0"
|
||||
spacetimedb-sdk = "=2.7.0"
|
||||
spacetimedb-lib = { version = "=2.7.0", default-features = false }
|
||||
time = "0.3"
|
||||
tokio = "1"
|
||||
tokio-stream = "0.1"
|
||||
|
||||
@@ -21,7 +21,7 @@ use reqwest::Client;
|
||||
use serde::Deserialize;
|
||||
use serde_json::{Map, Value};
|
||||
use shared_contracts::admin::{
|
||||
ADMIN_TAB_PERMISSIONS, AdminAccountRole,
|
||||
ADMIN_TAB_PERMISSIONS, AdminAccountRole, AdminConfirmEditorShowcaseCampaignImageUploadRequest,
|
||||
AdminCreateEditorShowcaseCampaignImageUploadTicketRequest,
|
||||
AdminCreateEditorShowcaseCampaignImageUploadTicketResponse, AdminDashboardBreakdownRowPayload,
|
||||
AdminDashboardChartBucketPayload, AdminDashboardChartPayload, AdminDashboardMetricsPayload,
|
||||
@@ -50,7 +50,8 @@ use shared_contracts::admin::{
|
||||
AdminUpsertPublicWorkInteractionConfigRequest, AdminWorkVisibilityListResponse,
|
||||
};
|
||||
use shared_contracts::assets::{
|
||||
CreateDirectUploadTicketRequest, DirectUploadObjectAccess, GetReadUrlQuery,
|
||||
ConfirmAssetObjectAccessPolicy, ConfirmAssetObjectRequest, CreateDirectUploadTicketRequest,
|
||||
DirectUploadObjectAccess, GetReadUrlQuery,
|
||||
};
|
||||
#[cfg(any())]
|
||||
use shared_contracts::creation_entry_config::{
|
||||
@@ -71,8 +72,8 @@ use crate::{
|
||||
admin_accounts::normalize_admin_account_username,
|
||||
api_response::json_success_body,
|
||||
assets::{
|
||||
AssetReadAuthorization, create_direct_upload_ticket_for_owner,
|
||||
get_asset_read_url_with_query,
|
||||
AssetReadAuthorization, confirm_asset_object_for_owner,
|
||||
create_direct_upload_ticket_for_owner, get_asset_read_url_with_query,
|
||||
},
|
||||
editor_generation_config::EditorGenerationPricingConfig,
|
||||
editor_project::current_utc_micros,
|
||||
@@ -113,6 +114,9 @@ const ADMIN_DASHBOARD_MAX_PERIOD_DAYS: i64 = 366;
|
||||
const ADMIN_EDITOR_ASSET_DEFAULT_LIMIT: u32 = 80;
|
||||
const ADMIN_EDITOR_ASSET_MAX_LIMIT: u32 = 200;
|
||||
const ADMIN_EDITOR_SHOWCASE_CAMPAIGN_IMAGE_MAX_BYTES: u64 = 20 * 1024 * 1024;
|
||||
const ADMIN_EDITOR_SHOWCASE_CAMPAIGN_IMAGE_OBJECT_KEY_PREFIX: &str =
|
||||
"generated-character-drafts/editor/showcase-campaign/";
|
||||
const ADMIN_EDITOR_SHOWCASE_CAMPAIGN_IMAGE_ASSET_KIND: &str = "editor_showcase_campaign_image";
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct AuthenticatedAdmin {
|
||||
@@ -903,6 +907,69 @@ pub async fn admin_create_editor_showcase_campaign_image_upload_ticket(
|
||||
))
|
||||
}
|
||||
|
||||
pub async fn admin_confirm_editor_showcase_campaign_image_upload(
|
||||
State(state): State<AppState>,
|
||||
Extension(request_context): Extension<RequestContext>,
|
||||
Extension(admin): Extension<AuthenticatedAdmin>,
|
||||
Json(payload): Json<AdminConfirmEditorShowcaseCampaignImageUploadRequest>,
|
||||
) -> Result<Json<Value>, AppError> {
|
||||
let confirm_request = build_admin_editor_showcase_campaign_image_confirm_request(payload)?;
|
||||
confirm_asset_object_for_owner(
|
||||
&state,
|
||||
&request_context,
|
||||
admin.session().subject.as_str(),
|
||||
confirm_request,
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
fn build_admin_editor_showcase_campaign_image_confirm_request(
|
||||
payload: AdminConfirmEditorShowcaseCampaignImageUploadRequest,
|
||||
) -> Result<ConfirmAssetObjectRequest, AppError> {
|
||||
let bucket = payload.bucket.trim();
|
||||
if bucket.is_empty() {
|
||||
return Err(AppError::from_status(StatusCode::BAD_REQUEST)
|
||||
.with_message("活动卡图片 bucket 不能为空"));
|
||||
}
|
||||
let object_key = payload.object_key.trim().trim_start_matches('/');
|
||||
if !object_key.starts_with(ADMIN_EDITOR_SHOWCASE_CAMPAIGN_IMAGE_OBJECT_KEY_PREFIX)
|
||||
|| object_key.len() == ADMIN_EDITOR_SHOWCASE_CAMPAIGN_IMAGE_OBJECT_KEY_PREFIX.len()
|
||||
{
|
||||
return Err(AppError::from_status(StatusCode::BAD_REQUEST)
|
||||
.with_message("活动卡图片 Object Key 不属于后台活动卡目录"));
|
||||
}
|
||||
let content_type = payload.content_type.trim();
|
||||
if !content_type.starts_with("image/") {
|
||||
return Err(
|
||||
AppError::from_status(StatusCode::BAD_REQUEST).with_message("活动卡只能确认图片对象")
|
||||
);
|
||||
}
|
||||
if payload.content_length == 0 {
|
||||
return Err(
|
||||
AppError::from_status(StatusCode::BAD_REQUEST).with_message("活动卡图片不能为空")
|
||||
);
|
||||
}
|
||||
if payload.content_length > ADMIN_EDITOR_SHOWCASE_CAMPAIGN_IMAGE_MAX_BYTES {
|
||||
return Err(
|
||||
AppError::from_status(StatusCode::BAD_REQUEST).with_message("活动卡图片不能超过 20MB")
|
||||
);
|
||||
}
|
||||
|
||||
Ok(ConfirmAssetObjectRequest {
|
||||
bucket: Some(bucket.to_string()),
|
||||
object_key: object_key.to_string(),
|
||||
content_type: Some(content_type.to_string()),
|
||||
content_length: Some(payload.content_length),
|
||||
content_hash: None,
|
||||
asset_kind: ADMIN_EDITOR_SHOWCASE_CAMPAIGN_IMAGE_ASSET_KIND.to_string(),
|
||||
access_policy: Some(ConfirmAssetObjectAccessPolicy::Private),
|
||||
source_job_id: None,
|
||||
owner_user_id: None,
|
||||
profile_id: None,
|
||||
entity_id: None,
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(any())]
|
||||
fn build_admin_creation_entry_config_response(
|
||||
config: shared_contracts::creation_entry_config::CreationEntryConfigResponse,
|
||||
@@ -989,6 +1056,7 @@ fn admin_editor_showcase_asset_payload_from_record(
|
||||
task_id: record.task_id,
|
||||
asset_kind: record.asset_kind,
|
||||
generation_inputs: record.generation_inputs,
|
||||
thumbnail_src: record.thumbnail_src,
|
||||
generation_cost_mud_points: record.generation_cost_mud_points,
|
||||
refund_mud_points: record.refund_mud_points,
|
||||
review_status: record.review_status,
|
||||
@@ -3940,9 +4008,9 @@ mod tests {
|
||||
admin_editor_asset_group_payload, admin_editor_showcase_asset_payload_from_record,
|
||||
append_spacetime_sql_response_chunk, apply_admin_database_table_filters,
|
||||
build_admin_asset_read_url_audit, build_admin_dashboard_chart,
|
||||
build_admin_database_table_row, build_admin_tracking_event_keys_sql,
|
||||
build_admin_tracking_events_sql, build_body_preview, build_debug_base_url,
|
||||
build_spacetime_schema_url, clamp_admin_database_table_limit,
|
||||
build_admin_database_table_row, build_admin_editor_showcase_campaign_image_confirm_request,
|
||||
build_admin_tracking_event_keys_sql, build_admin_tracking_events_sql, build_body_preview,
|
||||
build_debug_base_url, build_spacetime_schema_url, clamp_admin_database_table_limit,
|
||||
clamp_admin_tracking_event_limit, enforce_admin_request_permission,
|
||||
finalize_admin_database_table_rows_response, group_admin_editor_asset_records,
|
||||
hash_admin_password, is_admin_account_not_found, is_safe_spacetime_table_name,
|
||||
@@ -3961,9 +4029,10 @@ mod tests {
|
||||
};
|
||||
use serde_json::json;
|
||||
use shared_contracts::admin::{
|
||||
AdminDashboardQuery, AdminDatabaseTableRowsQuery, AdminTrackingEventListQuery,
|
||||
AdminConfirmEditorShowcaseCampaignImageUploadRequest, AdminDashboardQuery,
|
||||
AdminDatabaseTableRowsQuery, AdminTrackingEventListQuery,
|
||||
};
|
||||
use shared_contracts::assets::GetReadUrlQuery;
|
||||
use shared_contracts::assets::{ConfirmAssetObjectAccessPolicy, GetReadUrlQuery};
|
||||
use spacetime_client::{
|
||||
AdminDashboardBreakdownRecord, AdminDashboardDailyCountRecord,
|
||||
AdminDashboardPaymentConversionRecord, AdminDashboardRetentionRecord,
|
||||
@@ -4070,6 +4139,83 @@ mod tests {
|
||||
assert!(draft.metadata.get("signedUrl").is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn campaign_image_confirm_is_scoped_to_private_activity_card_objects() {
|
||||
let request = build_admin_editor_showcase_campaign_image_confirm_request(
|
||||
AdminConfirmEditorShowcaseCampaignImageUploadRequest {
|
||||
bucket: " genarrative-release ".to_string(),
|
||||
object_key:
|
||||
" /generated-character-drafts/editor/showcase-campaign/current/card.png "
|
||||
.to_string(),
|
||||
content_type: " image/png ".to_string(),
|
||||
content_length: 1024,
|
||||
},
|
||||
)
|
||||
.expect("valid activity card upload should build a confirm request");
|
||||
|
||||
assert_eq!(request.bucket.as_deref(), Some("genarrative-release"));
|
||||
assert_eq!(
|
||||
request.object_key,
|
||||
"generated-character-drafts/editor/showcase-campaign/current/card.png"
|
||||
);
|
||||
assert_eq!(request.content_type.as_deref(), Some("image/png"));
|
||||
assert_eq!(request.content_length, Some(1024));
|
||||
assert_eq!(request.asset_kind, "editor_showcase_campaign_image");
|
||||
assert_eq!(
|
||||
request.access_policy,
|
||||
Some(ConfirmAssetObjectAccessPolicy::Private)
|
||||
);
|
||||
assert!(request.owner_user_id.is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn campaign_image_confirm_rejects_objects_outside_activity_card_directory() {
|
||||
let error = build_admin_editor_showcase_campaign_image_confirm_request(
|
||||
AdminConfirmEditorShowcaseCampaignImageUploadRequest {
|
||||
bucket: "genarrative-release".to_string(),
|
||||
object_key: "generated-character-drafts/editor/asset-library/private.png"
|
||||
.to_string(),
|
||||
content_type: "image/png".to_string(),
|
||||
content_length: 1024,
|
||||
},
|
||||
)
|
||||
.expect_err("unrelated editor objects must not use the activity card confirm route");
|
||||
|
||||
assert_eq!(error.status_code(), StatusCode::BAD_REQUEST);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn campaign_image_confirm_rejects_invalid_media_and_size() {
|
||||
for payload in [
|
||||
AdminConfirmEditorShowcaseCampaignImageUploadRequest {
|
||||
bucket: "genarrative-release".to_string(),
|
||||
object_key: "generated-character-drafts/editor/showcase-campaign/current/card.txt"
|
||||
.to_string(),
|
||||
content_type: "text/plain".to_string(),
|
||||
content_length: 1024,
|
||||
},
|
||||
AdminConfirmEditorShowcaseCampaignImageUploadRequest {
|
||||
bucket: "genarrative-release".to_string(),
|
||||
object_key: "generated-character-drafts/editor/showcase-campaign/current/empty.png"
|
||||
.to_string(),
|
||||
content_type: "image/png".to_string(),
|
||||
content_length: 0,
|
||||
},
|
||||
AdminConfirmEditorShowcaseCampaignImageUploadRequest {
|
||||
bucket: "genarrative-release".to_string(),
|
||||
object_key:
|
||||
"generated-character-drafts/editor/showcase-campaign/current/oversized.png"
|
||||
.to_string(),
|
||||
content_type: "image/png".to_string(),
|
||||
content_length: super::ADMIN_EDITOR_SHOWCASE_CAMPAIGN_IMAGE_MAX_BYTES + 1,
|
||||
},
|
||||
] {
|
||||
let error = build_admin_editor_showcase_campaign_image_confirm_request(payload)
|
||||
.expect_err("invalid activity card uploads must fail before OSS HEAD");
|
||||
assert_eq!(error.status_code(), StatusCode::BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn admin_editor_showcase_asset_payload_resolves_author_profile() {
|
||||
let state = AppState::new(AppConfig::default()).expect("state should build");
|
||||
@@ -4078,10 +4224,10 @@ mod tests {
|
||||
.ensure_orphan_work_owner_user("user-author-1", "author-1", "作者昵称", "SY-00000042")
|
||||
.expect("author should be inserted");
|
||||
|
||||
let payload = admin_editor_showcase_asset_payload_from_record(
|
||||
&state,
|
||||
test_admin_editor_showcase_asset_record("user-author-1"),
|
||||
);
|
||||
let mut record = test_admin_editor_showcase_asset_record("user-author-1");
|
||||
record.thumbnail_src =
|
||||
Some("/generated-character-drafts/editor/spec-thumb.png".to_string());
|
||||
let payload = admin_editor_showcase_asset_payload_from_record(&state, record);
|
||||
|
||||
assert_eq!(payload.owner_user_id, "user-author-1");
|
||||
assert_eq!(payload.author_display_name.as_deref(), Some("作者昵称"));
|
||||
@@ -4089,6 +4235,10 @@ mod tests {
|
||||
payload.author_public_user_code.as_deref(),
|
||||
Some("SY-00000042")
|
||||
);
|
||||
assert_eq!(
|
||||
payload.thumbnail_src.as_deref(),
|
||||
Some("/generated-character-drafts/editor/spec-thumb.png")
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -686,7 +686,23 @@ async fn authorize_asset_read_target(
|
||||
})
|
||||
.await
|
||||
.map_err(map_asset_read_authorization_error)?;
|
||||
if let Some(asset_object) = asset_object.as_ref() {
|
||||
resolve_asset_read_access(
|
||||
configured_bucket,
|
||||
target,
|
||||
authorization,
|
||||
asset_object.as_ref(),
|
||||
public_work_granted,
|
||||
)
|
||||
}
|
||||
|
||||
fn resolve_asset_read_access(
|
||||
configured_bucket: &str,
|
||||
target: &AssetReadTarget,
|
||||
authorization: &AssetReadAuthorization,
|
||||
asset_object: Option<&module_assets::AssetObjectRecord>,
|
||||
public_work_granted: bool,
|
||||
) -> Result<AssetReadAccessScope, AppError> {
|
||||
if let Some(asset_object) = asset_object {
|
||||
return require_asset_object_read_access(
|
||||
asset_object,
|
||||
configured_bucket,
|
||||
@@ -696,6 +712,12 @@ async fn authorize_asset_read_target(
|
||||
);
|
||||
}
|
||||
|
||||
// 当前启用的活动卡可能来自历史上传,尚无 asset_object metadata;
|
||||
// SpacetimeDB 只会对配置中的 exact object key 派生该授权,禁用或换图后立即失效。
|
||||
if public_work_granted {
|
||||
return Ok(AssetReadAccessScope::Public);
|
||||
}
|
||||
|
||||
// 已登记对象始终服从 metadata ACL;只有没有 metadata 的历史资源才走公开前缀兼容。
|
||||
if target.is_legacy_public_path && is_supported_legacy_public_object_key(&target.object_key) {
|
||||
return Ok(AssetReadAccessScope::Public);
|
||||
@@ -1120,6 +1142,38 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn current_campaign_grant_allows_exact_object_key_without_legacy_metadata() {
|
||||
let target = super::AssetReadTarget {
|
||||
object_key: "generated-character-drafts/editor/showcase-campaign/current/image.png"
|
||||
.to_string(),
|
||||
is_legacy_public_path: false,
|
||||
};
|
||||
|
||||
assert!(matches!(
|
||||
super::resolve_asset_read_access(
|
||||
"genarrative-assets",
|
||||
&target,
|
||||
&super::AssetReadAuthorization::Anonymous,
|
||||
None,
|
||||
true,
|
||||
),
|
||||
Ok(super::AssetReadAccessScope::Public)
|
||||
));
|
||||
assert_eq!(
|
||||
super::resolve_asset_read_access(
|
||||
"genarrative-assets",
|
||||
&target,
|
||||
&super::AssetReadAuthorization::Anonymous,
|
||||
None,
|
||||
false,
|
||||
)
|
||||
.expect_err("unregistered object key without an exact grant should stay hidden")
|
||||
.status_code(),
|
||||
StatusCode::NOT_FOUND
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn public_asset_read_url_expiry_is_capped_but_privileged_expiry_is_preserved() {
|
||||
assert_eq!(
|
||||
|
||||
@@ -5,6 +5,7 @@ use axum::{
|
||||
|
||||
use crate::{
|
||||
admin::{
|
||||
admin_confirm_editor_showcase_campaign_image_upload,
|
||||
admin_create_editor_showcase_campaign_image_upload_ticket, admin_dashboard,
|
||||
admin_debug_http, admin_get_asset_read_url, admin_get_editor_generation_pricing,
|
||||
admin_get_editor_showcase_campaign, admin_get_feature_gate_config,
|
||||
@@ -174,6 +175,12 @@ pub fn router(state: AppState) -> Router<AppState> {
|
||||
middleware::from_fn_with_state(state.clone(), require_admin_auth),
|
||||
),
|
||||
)
|
||||
.route(
|
||||
"/admin/api/editor-showcase/campaign/image-upload-confirm",
|
||||
post(admin_confirm_editor_showcase_campaign_image_upload).route_layer(
|
||||
middleware::from_fn_with_state(state.clone(), require_admin_auth),
|
||||
),
|
||||
)
|
||||
.route(
|
||||
"/admin/api/profile/redeem-codes",
|
||||
get(admin_list_profile_redeem_codes)
|
||||
|
||||
@@ -278,6 +278,7 @@ pub struct AdminEditorShowcaseAssetPayload {
|
||||
pub task_id: Option<String>,
|
||||
pub asset_kind: Option<String>,
|
||||
pub generation_inputs: Option<Value>,
|
||||
pub thumbnail_src: Option<String>,
|
||||
pub generation_cost_mud_points: u64,
|
||||
pub refund_mud_points: u64,
|
||||
pub review_status: String,
|
||||
@@ -374,6 +375,15 @@ pub struct AdminCreateEditorShowcaseCampaignImageUploadTicketResponse {
|
||||
pub upload: AdminDirectUploadTicketPayload,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct AdminConfirmEditorShowcaseCampaignImageUploadRequest {
|
||||
pub bucket: String,
|
||||
pub object_key: String,
|
||||
pub content_type: String,
|
||||
pub content_length: u64,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct AdminDirectUploadTicketPayload {
|
||||
@@ -989,7 +999,10 @@ pub struct AdminWalletRestrictionResponse {
|
||||
mod tests {
|
||||
use serde_json::json;
|
||||
|
||||
use super::{AdminEditorShowcaseAssetPayload, AdminRechargeRefundManualReviewResolveRequest};
|
||||
use super::{
|
||||
AdminConfirmEditorShowcaseCampaignImageUploadRequest, AdminEditorShowcaseAssetPayload,
|
||||
AdminRechargeRefundManualReviewResolveRequest,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn refund_manual_review_resolution_request_uses_camel_case_contract() {
|
||||
@@ -1008,6 +1021,26 @@ mod tests {
|
||||
assert!(value.get("out_refund_no").is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn editor_showcase_campaign_image_confirm_uses_camel_case_contract() {
|
||||
let value = serde_json::to_value(AdminConfirmEditorShowcaseCampaignImageUploadRequest {
|
||||
bucket: "genarrative-release".to_string(),
|
||||
object_key: "generated-character-drafts/editor/showcase-campaign/current/card.png"
|
||||
.to_string(),
|
||||
content_type: "image/png".to_string(),
|
||||
content_length: 1024,
|
||||
})
|
||||
.expect("request should serialize");
|
||||
|
||||
assert_eq!(
|
||||
value["objectKey"],
|
||||
json!("generated-character-drafts/editor/showcase-campaign/current/card.png")
|
||||
);
|
||||
assert_eq!(value["contentType"], json!("image/png"));
|
||||
assert_eq!(value["contentLength"], json!(1024));
|
||||
assert!(value.get("object_key").is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn editor_showcase_asset_payload_serializes_author_fields_as_camel_case() {
|
||||
let payload = AdminEditorShowcaseAssetPayload {
|
||||
@@ -1028,6 +1061,7 @@ mod tests {
|
||||
task_id: None,
|
||||
asset_kind: Some("character".to_string()),
|
||||
generation_inputs: None,
|
||||
thumbnail_src: Some("/generated-character-drafts/editor/spec-thumb.png".to_string()),
|
||||
generation_cost_mud_points: 12,
|
||||
refund_mud_points: 6,
|
||||
review_status: "pending".to_string(),
|
||||
@@ -1050,7 +1084,12 @@ mod tests {
|
||||
|
||||
assert_eq!(value["authorDisplayName"], json!("作者昵称"));
|
||||
assert_eq!(value["authorPublicUserCode"], json!("SY-00000042"));
|
||||
assert_eq!(
|
||||
value["thumbnailSrc"],
|
||||
json!("/generated-character-drafts/editor/spec-thumb.png")
|
||||
);
|
||||
assert!(value.get("author_display_name").is_none());
|
||||
assert!(value.get("author_public_user_code").is_none());
|
||||
assert!(value.get("thumbnail_src").is_none());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE
|
||||
// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD.
|
||||
|
||||
// This was generated using spacetimedb cli version 2.6.1 (commit 052c83fe984a4c4eb7bb4f9afa5c6b1903891d87).
|
||||
// This was generated using spacetimedb cli version 2.7.0 (commit d220349adb7af7eefa810eb08a185609356b83f6).
|
||||
|
||||
#![allow(unused, clippy::all)]
|
||||
use spacetimedb_sdk::__codegen::{self as __sdk, __lib, __sats, __ws};
|
||||
|
||||
@@ -18,6 +18,18 @@ pub struct AdminAccountTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `admin_account`.
|
||||
pub struct AdminAccountTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AdminAccountTableAccessor {
|
||||
type Row = AdminAccount;
|
||||
type Handle<'db> = AdminAccountTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.admin_account()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `admin_account`.
|
||||
///
|
||||
@@ -40,6 +52,18 @@ impl AdminAccountTableAccess for super::RemoteTables {
|
||||
pub struct AdminAccountInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct AdminAccountDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AdminAccountTableHandle<'ctx> {
|
||||
type Row = AdminAccount;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AdminAccount> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for AdminAccountTableHandle<'ctx> {
|
||||
type Row = AdminAccount;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -78,6 +102,36 @@ impl<'ctx> __sdk::Table for AdminAccountTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AdminAccountTableHandle<'ctx> {
|
||||
type InsertCallbackId = AdminAccountInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AdminAccountInsertCallbackId {
|
||||
AdminAccountInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AdminAccountInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for AdminAccountTableHandle<'ctx> {
|
||||
type DeleteCallbackId = AdminAccountDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AdminAccountDeleteCallbackId {
|
||||
AdminAccountDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: AdminAccountDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AdminAccountUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for AdminAccountTableHandle<'ctx> {
|
||||
@@ -95,6 +149,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for AdminAccountTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for AdminAccountTableHandle<'ctx> {
|
||||
type UpdateCallbackId = AdminAccountUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> AdminAccountUpdateCallbackId {
|
||||
AdminAccountUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: AdminAccountUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `account_id` unique index on the table `admin_account`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`AdminAccountAccountIdUnique::find`] method.
|
||||
|
||||
@@ -19,6 +19,18 @@ pub struct AiResultReferenceTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `ai_result_reference`.
|
||||
pub struct AiResultReferenceTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AiResultReferenceTableAccessor {
|
||||
type Row = AiResultReference;
|
||||
type Handle<'db> = AiResultReferenceTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.ai_result_reference()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `ai_result_reference`.
|
||||
///
|
||||
@@ -43,6 +55,18 @@ impl AiResultReferenceTableAccess for super::RemoteTables {
|
||||
pub struct AiResultReferenceInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct AiResultReferenceDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AiResultReferenceTableHandle<'ctx> {
|
||||
type Row = AiResultReference;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AiResultReference> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for AiResultReferenceTableHandle<'ctx> {
|
||||
type Row = AiResultReference;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -81,6 +105,36 @@ impl<'ctx> __sdk::Table for AiResultReferenceTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AiResultReferenceTableHandle<'ctx> {
|
||||
type InsertCallbackId = AiResultReferenceInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AiResultReferenceInsertCallbackId {
|
||||
AiResultReferenceInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AiResultReferenceInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for AiResultReferenceTableHandle<'ctx> {
|
||||
type DeleteCallbackId = AiResultReferenceDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AiResultReferenceDeleteCallbackId {
|
||||
AiResultReferenceDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: AiResultReferenceDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AiResultReferenceUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for AiResultReferenceTableHandle<'ctx> {
|
||||
@@ -98,6 +152,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for AiResultReferenceTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for AiResultReferenceTableHandle<'ctx> {
|
||||
type UpdateCallbackId = AiResultReferenceUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> AiResultReferenceUpdateCallbackId {
|
||||
AiResultReferenceUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: AiResultReferenceUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `result_reference_row_id` unique index on the table `ai_result_reference`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`AiResultReferenceResultReferenceRowIdUnique::find`] method.
|
||||
|
||||
@@ -21,6 +21,18 @@ pub struct AiTaskEventTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `ai_task_event`.
|
||||
pub struct AiTaskEventTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AiTaskEventTableAccessor {
|
||||
type Row = AiTaskEvent;
|
||||
type Handle<'db> = AiTaskEventTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.ai_task_event()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `ai_task_event`.
|
||||
///
|
||||
@@ -42,6 +54,18 @@ impl AiTaskEventTableAccess for super::RemoteTables {
|
||||
|
||||
pub struct AiTaskEventInsertCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AiTaskEventTableHandle<'ctx> {
|
||||
type Row = AiTaskEvent;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AiTaskEvent> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::EventTable for AiTaskEventTableHandle<'ctx> {
|
||||
type Row = AiTaskEvent;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -67,6 +91,21 @@ impl<'ctx> __sdk::EventTable for AiTaskEventTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AiTaskEventTableHandle<'ctx> {
|
||||
type InsertCallbackId = AiTaskEventInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AiTaskEventInsertCallbackId {
|
||||
AiTaskEventInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AiTaskEventInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
pub(super) fn register_table(client_cache: &mut __sdk::ClientCache<super::RemoteModule>) {
|
||||
let _table = client_cache.get_or_make_table::<AiTaskEvent>("ai_task_event");
|
||||
|
||||
@@ -20,6 +20,18 @@ pub struct AiTaskStageTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `ai_task_stage`.
|
||||
pub struct AiTaskStageTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AiTaskStageTableAccessor {
|
||||
type Row = AiTaskStage;
|
||||
type Handle<'db> = AiTaskStageTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.ai_task_stage()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `ai_task_stage`.
|
||||
///
|
||||
@@ -42,6 +54,18 @@ impl AiTaskStageTableAccess for super::RemoteTables {
|
||||
pub struct AiTaskStageInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct AiTaskStageDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AiTaskStageTableHandle<'ctx> {
|
||||
type Row = AiTaskStage;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AiTaskStage> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for AiTaskStageTableHandle<'ctx> {
|
||||
type Row = AiTaskStage;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -80,6 +104,36 @@ impl<'ctx> __sdk::Table for AiTaskStageTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AiTaskStageTableHandle<'ctx> {
|
||||
type InsertCallbackId = AiTaskStageInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AiTaskStageInsertCallbackId {
|
||||
AiTaskStageInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AiTaskStageInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for AiTaskStageTableHandle<'ctx> {
|
||||
type DeleteCallbackId = AiTaskStageDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AiTaskStageDeleteCallbackId {
|
||||
AiTaskStageDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: AiTaskStageDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AiTaskStageUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for AiTaskStageTableHandle<'ctx> {
|
||||
@@ -97,6 +151,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for AiTaskStageTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for AiTaskStageTableHandle<'ctx> {
|
||||
type UpdateCallbackId = AiTaskStageUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> AiTaskStageUpdateCallbackId {
|
||||
AiTaskStageUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: AiTaskStageUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `task_stage_id` unique index on the table `ai_task_stage`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`AiTaskStageTaskStageIdUnique::find`] method.
|
||||
|
||||
@@ -20,6 +20,18 @@ pub struct AiTaskTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `ai_task`.
|
||||
pub struct AiTaskTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AiTaskTableAccessor {
|
||||
type Row = AiTask;
|
||||
type Handle<'db> = AiTaskTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.ai_task()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `ai_task`.
|
||||
///
|
||||
@@ -42,6 +54,18 @@ impl AiTaskTableAccess for super::RemoteTables {
|
||||
pub struct AiTaskInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct AiTaskDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AiTaskTableHandle<'ctx> {
|
||||
type Row = AiTask;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AiTask> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for AiTaskTableHandle<'ctx> {
|
||||
type Row = AiTask;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -80,6 +104,36 @@ impl<'ctx> __sdk::Table for AiTaskTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AiTaskTableHandle<'ctx> {
|
||||
type InsertCallbackId = AiTaskInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AiTaskInsertCallbackId {
|
||||
AiTaskInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AiTaskInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for AiTaskTableHandle<'ctx> {
|
||||
type DeleteCallbackId = AiTaskDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AiTaskDeleteCallbackId {
|
||||
AiTaskDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: AiTaskDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AiTaskUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for AiTaskTableHandle<'ctx> {
|
||||
@@ -97,6 +151,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for AiTaskTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for AiTaskTableHandle<'ctx> {
|
||||
type UpdateCallbackId = AiTaskUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> AiTaskUpdateCallbackId {
|
||||
AiTaskUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: AiTaskUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `task_id` unique index on the table `ai_task`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`AiTaskTaskIdUnique::find`] method.
|
||||
|
||||
@@ -19,6 +19,18 @@ pub struct AiTextChunkTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `ai_text_chunk`.
|
||||
pub struct AiTextChunkTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AiTextChunkTableAccessor {
|
||||
type Row = AiTextChunk;
|
||||
type Handle<'db> = AiTextChunkTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.ai_text_chunk()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `ai_text_chunk`.
|
||||
///
|
||||
@@ -41,6 +53,18 @@ impl AiTextChunkTableAccess for super::RemoteTables {
|
||||
pub struct AiTextChunkInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct AiTextChunkDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AiTextChunkTableHandle<'ctx> {
|
||||
type Row = AiTextChunk;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AiTextChunk> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for AiTextChunkTableHandle<'ctx> {
|
||||
type Row = AiTextChunk;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -79,6 +103,36 @@ impl<'ctx> __sdk::Table for AiTextChunkTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AiTextChunkTableHandle<'ctx> {
|
||||
type InsertCallbackId = AiTextChunkInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AiTextChunkInsertCallbackId {
|
||||
AiTextChunkInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AiTextChunkInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for AiTextChunkTableHandle<'ctx> {
|
||||
type DeleteCallbackId = AiTextChunkDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AiTextChunkDeleteCallbackId {
|
||||
AiTextChunkDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: AiTextChunkDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AiTextChunkUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for AiTextChunkTableHandle<'ctx> {
|
||||
@@ -96,6 +150,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for AiTextChunkTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for AiTextChunkTableHandle<'ctx> {
|
||||
type UpdateCallbackId = AiTextChunkUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> AiTextChunkUpdateCallbackId {
|
||||
AiTextChunkUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: AiTextChunkUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `text_chunk_row_id` unique index on the table `ai_text_chunk`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`AiTextChunkTextChunkRowIdUnique::find`] method.
|
||||
|
||||
+69
@@ -18,6 +18,18 @@ pub struct AnalyticsDateDimensionTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `analytics_date_dimension`.
|
||||
pub struct AnalyticsDateDimensionTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AnalyticsDateDimensionTableAccessor {
|
||||
type Row = AnalyticsDateDimension;
|
||||
type Handle<'db> = AnalyticsDateDimensionTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.analytics_date_dimension()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `analytics_date_dimension`.
|
||||
///
|
||||
@@ -42,6 +54,18 @@ impl AnalyticsDateDimensionTableAccess for super::RemoteTables {
|
||||
pub struct AnalyticsDateDimensionInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct AnalyticsDateDimensionDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AnalyticsDateDimensionTableHandle<'ctx> {
|
||||
type Row = AnalyticsDateDimension;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AnalyticsDateDimension> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for AnalyticsDateDimensionTableHandle<'ctx> {
|
||||
type Row = AnalyticsDateDimension;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -80,6 +104,36 @@ impl<'ctx> __sdk::Table for AnalyticsDateDimensionTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AnalyticsDateDimensionTableHandle<'ctx> {
|
||||
type InsertCallbackId = AnalyticsDateDimensionInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AnalyticsDateDimensionInsertCallbackId {
|
||||
AnalyticsDateDimensionInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AnalyticsDateDimensionInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for AnalyticsDateDimensionTableHandle<'ctx> {
|
||||
type DeleteCallbackId = AnalyticsDateDimensionDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AnalyticsDateDimensionDeleteCallbackId {
|
||||
AnalyticsDateDimensionDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: AnalyticsDateDimensionDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AnalyticsDateDimensionUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for AnalyticsDateDimensionTableHandle<'ctx> {
|
||||
@@ -97,6 +151,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for AnalyticsDateDimensionTableHandle<'ctx
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for AnalyticsDateDimensionTableHandle<'ctx> {
|
||||
type UpdateCallbackId = AnalyticsDateDimensionUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> AnalyticsDateDimensionUpdateCallbackId {
|
||||
AnalyticsDateDimensionUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: AnalyticsDateDimensionUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `date_key` unique index on the table `analytics_date_dimension`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`AnalyticsDateDimensionDateKeyUnique::find`] method.
|
||||
|
||||
@@ -18,6 +18,18 @@ pub struct AssetEntityBindingTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `asset_entity_binding`.
|
||||
pub struct AssetEntityBindingTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AssetEntityBindingTableAccessor {
|
||||
type Row = AssetEntityBinding;
|
||||
type Handle<'db> = AssetEntityBindingTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.asset_entity_binding()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `asset_entity_binding`.
|
||||
///
|
||||
@@ -42,6 +54,18 @@ impl AssetEntityBindingTableAccess for super::RemoteTables {
|
||||
pub struct AssetEntityBindingInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct AssetEntityBindingDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AssetEntityBindingTableHandle<'ctx> {
|
||||
type Row = AssetEntityBinding;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AssetEntityBinding> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for AssetEntityBindingTableHandle<'ctx> {
|
||||
type Row = AssetEntityBinding;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -80,6 +104,36 @@ impl<'ctx> __sdk::Table for AssetEntityBindingTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AssetEntityBindingTableHandle<'ctx> {
|
||||
type InsertCallbackId = AssetEntityBindingInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AssetEntityBindingInsertCallbackId {
|
||||
AssetEntityBindingInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AssetEntityBindingInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for AssetEntityBindingTableHandle<'ctx> {
|
||||
type DeleteCallbackId = AssetEntityBindingDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AssetEntityBindingDeleteCallbackId {
|
||||
AssetEntityBindingDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: AssetEntityBindingDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AssetEntityBindingUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for AssetEntityBindingTableHandle<'ctx> {
|
||||
@@ -97,6 +151,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for AssetEntityBindingTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for AssetEntityBindingTableHandle<'ctx> {
|
||||
type UpdateCallbackId = AssetEntityBindingUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> AssetEntityBindingUpdateCallbackId {
|
||||
AssetEntityBindingUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: AssetEntityBindingUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `binding_id` unique index on the table `asset_entity_binding`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`AssetEntityBindingBindingIdUnique::find`] method.
|
||||
|
||||
@@ -19,6 +19,18 @@ pub struct AssetEventTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `asset_event`.
|
||||
pub struct AssetEventTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AssetEventTableAccessor {
|
||||
type Row = AssetEvent;
|
||||
type Handle<'db> = AssetEventTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.asset_event()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `asset_event`.
|
||||
///
|
||||
@@ -40,6 +52,18 @@ impl AssetEventTableAccess for super::RemoteTables {
|
||||
|
||||
pub struct AssetEventInsertCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AssetEventTableHandle<'ctx> {
|
||||
type Row = AssetEvent;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AssetEvent> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::EventTable for AssetEventTableHandle<'ctx> {
|
||||
type Row = AssetEvent;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -65,6 +89,21 @@ impl<'ctx> __sdk::EventTable for AssetEventTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AssetEventTableHandle<'ctx> {
|
||||
type InsertCallbackId = AssetEventInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AssetEventInsertCallbackId {
|
||||
AssetEventInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AssetEventInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
pub(super) fn register_table(client_cache: &mut __sdk::ClientCache<super::RemoteModule>) {
|
||||
let _table = client_cache.get_or_make_table::<AssetEvent>("asset_event");
|
||||
|
||||
@@ -19,6 +19,18 @@ pub struct AssetObjectTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `asset_object`.
|
||||
pub struct AssetObjectTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AssetObjectTableAccessor {
|
||||
type Row = AssetObject;
|
||||
type Handle<'db> = AssetObjectTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.asset_object()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `asset_object`.
|
||||
///
|
||||
@@ -41,6 +53,18 @@ impl AssetObjectTableAccess for super::RemoteTables {
|
||||
pub struct AssetObjectInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct AssetObjectDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AssetObjectTableHandle<'ctx> {
|
||||
type Row = AssetObject;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AssetObject> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for AssetObjectTableHandle<'ctx> {
|
||||
type Row = AssetObject;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -79,6 +103,36 @@ impl<'ctx> __sdk::Table for AssetObjectTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AssetObjectTableHandle<'ctx> {
|
||||
type InsertCallbackId = AssetObjectInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AssetObjectInsertCallbackId {
|
||||
AssetObjectInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AssetObjectInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for AssetObjectTableHandle<'ctx> {
|
||||
type DeleteCallbackId = AssetObjectDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AssetObjectDeleteCallbackId {
|
||||
AssetObjectDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: AssetObjectDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AssetObjectUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for AssetObjectTableHandle<'ctx> {
|
||||
@@ -96,6 +150,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for AssetObjectTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for AssetObjectTableHandle<'ctx> {
|
||||
type UpdateCallbackId = AssetObjectUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> AssetObjectUpdateCallbackId {
|
||||
AssetObjectUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: AssetObjectUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `asset_object_id` unique index on the table `asset_object`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`AssetObjectAssetObjectIdUnique::find`] method.
|
||||
|
||||
+69
@@ -18,6 +18,18 @@ pub struct AssetOperationWalletSettlementTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `asset_operation_wallet_settlement`.
|
||||
pub struct AssetOperationWalletSettlementTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AssetOperationWalletSettlementTableAccessor {
|
||||
type Row = AssetOperationWalletSettlement;
|
||||
type Handle<'db> = AssetOperationWalletSettlementTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.asset_operation_wallet_settlement()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `asset_operation_wallet_settlement`.
|
||||
///
|
||||
@@ -42,6 +54,18 @@ impl AssetOperationWalletSettlementTableAccess for super::RemoteTables {
|
||||
pub struct AssetOperationWalletSettlementInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct AssetOperationWalletSettlementDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AssetOperationWalletSettlementTableHandle<'ctx> {
|
||||
type Row = AssetOperationWalletSettlement;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AssetOperationWalletSettlement> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for AssetOperationWalletSettlementTableHandle<'ctx> {
|
||||
type Row = AssetOperationWalletSettlement;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -80,6 +104,36 @@ impl<'ctx> __sdk::Table for AssetOperationWalletSettlementTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AssetOperationWalletSettlementTableHandle<'ctx> {
|
||||
type InsertCallbackId = AssetOperationWalletSettlementInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AssetOperationWalletSettlementInsertCallbackId {
|
||||
AssetOperationWalletSettlementInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AssetOperationWalletSettlementInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for AssetOperationWalletSettlementTableHandle<'ctx> {
|
||||
type DeleteCallbackId = AssetOperationWalletSettlementDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AssetOperationWalletSettlementDeleteCallbackId {
|
||||
AssetOperationWalletSettlementDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: AssetOperationWalletSettlementDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AssetOperationWalletSettlementUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for AssetOperationWalletSettlementTableHandle<'ctx> {
|
||||
@@ -97,6 +151,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for AssetOperationWalletSettlementTableHan
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for AssetOperationWalletSettlementTableHandle<'ctx> {
|
||||
type UpdateCallbackId = AssetOperationWalletSettlementUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> AssetOperationWalletSettlementUpdateCallbackId {
|
||||
AssetOperationWalletSettlementUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: AssetOperationWalletSettlementUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `consume_ledger_id` unique index on the table `asset_operation_wallet_settlement`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`AssetOperationWalletSettlementConsumeLedgerIdUnique::find`] method.
|
||||
|
||||
@@ -18,6 +18,18 @@ pub struct AuthIdentityTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `auth_identity`.
|
||||
pub struct AuthIdentityTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AuthIdentityTableAccessor {
|
||||
type Row = AuthIdentity;
|
||||
type Handle<'db> = AuthIdentityTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.auth_identity()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `auth_identity`.
|
||||
///
|
||||
@@ -40,6 +52,18 @@ impl AuthIdentityTableAccess for super::RemoteTables {
|
||||
pub struct AuthIdentityInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct AuthIdentityDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AuthIdentityTableHandle<'ctx> {
|
||||
type Row = AuthIdentity;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AuthIdentity> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for AuthIdentityTableHandle<'ctx> {
|
||||
type Row = AuthIdentity;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -78,6 +102,36 @@ impl<'ctx> __sdk::Table for AuthIdentityTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AuthIdentityTableHandle<'ctx> {
|
||||
type InsertCallbackId = AuthIdentityInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AuthIdentityInsertCallbackId {
|
||||
AuthIdentityInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AuthIdentityInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for AuthIdentityTableHandle<'ctx> {
|
||||
type DeleteCallbackId = AuthIdentityDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AuthIdentityDeleteCallbackId {
|
||||
AuthIdentityDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: AuthIdentityDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AuthIdentityUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for AuthIdentityTableHandle<'ctx> {
|
||||
@@ -95,6 +149,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for AuthIdentityTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for AuthIdentityTableHandle<'ctx> {
|
||||
type UpdateCallbackId = AuthIdentityUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> AuthIdentityUpdateCallbackId {
|
||||
AuthIdentityUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: AuthIdentityUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `identity_id` unique index on the table `auth_identity`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`AuthIdentityIdentityIdUnique::find`] method.
|
||||
|
||||
+69
@@ -18,6 +18,18 @@ pub struct AuthStoreProjectionMetaTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `auth_store_projection_meta`.
|
||||
pub struct AuthStoreProjectionMetaTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for AuthStoreProjectionMetaTableAccessor {
|
||||
type Row = AuthStoreProjectionMeta;
|
||||
type Handle<'db> = AuthStoreProjectionMetaTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.auth_store_projection_meta()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `auth_store_projection_meta`.
|
||||
///
|
||||
@@ -42,6 +54,18 @@ impl AuthStoreProjectionMetaTableAccess for super::RemoteTables {
|
||||
pub struct AuthStoreProjectionMetaInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct AuthStoreProjectionMetaDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for AuthStoreProjectionMetaTableHandle<'ctx> {
|
||||
type Row = AuthStoreProjectionMeta;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = AuthStoreProjectionMeta> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for AuthStoreProjectionMetaTableHandle<'ctx> {
|
||||
type Row = AuthStoreProjectionMeta;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -80,6 +104,36 @@ impl<'ctx> __sdk::Table for AuthStoreProjectionMetaTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for AuthStoreProjectionMetaTableHandle<'ctx> {
|
||||
type InsertCallbackId = AuthStoreProjectionMetaInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AuthStoreProjectionMetaInsertCallbackId {
|
||||
AuthStoreProjectionMetaInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: AuthStoreProjectionMetaInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for AuthStoreProjectionMetaTableHandle<'ctx> {
|
||||
type DeleteCallbackId = AuthStoreProjectionMetaDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> AuthStoreProjectionMetaDeleteCallbackId {
|
||||
AuthStoreProjectionMetaDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: AuthStoreProjectionMetaDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AuthStoreProjectionMetaUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for AuthStoreProjectionMetaTableHandle<'ctx> {
|
||||
@@ -97,6 +151,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for AuthStoreProjectionMetaTableHandle<'ct
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for AuthStoreProjectionMetaTableHandle<'ctx> {
|
||||
type UpdateCallbackId = AuthStoreProjectionMetaUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> AuthStoreProjectionMetaUpdateCallbackId {
|
||||
AuthStoreProjectionMetaUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: AuthStoreProjectionMetaUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `meta_id` unique index on the table `auth_store_projection_meta`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`AuthStoreProjectionMetaMetaIdUnique::find`] method.
|
||||
|
||||
+69
@@ -18,6 +18,18 @@ pub struct BarkBattleDraftConfigTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `bark_battle_draft_config`.
|
||||
pub struct BarkBattleDraftConfigTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for BarkBattleDraftConfigTableAccessor {
|
||||
type Row = BarkBattleDraftConfigRow;
|
||||
type Handle<'db> = BarkBattleDraftConfigTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.bark_battle_draft_config()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `bark_battle_draft_config`.
|
||||
///
|
||||
@@ -42,6 +54,18 @@ impl BarkBattleDraftConfigTableAccess for super::RemoteTables {
|
||||
pub struct BarkBattleDraftConfigInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct BarkBattleDraftConfigDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for BarkBattleDraftConfigTableHandle<'ctx> {
|
||||
type Row = BarkBattleDraftConfigRow;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = BarkBattleDraftConfigRow> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for BarkBattleDraftConfigTableHandle<'ctx> {
|
||||
type Row = BarkBattleDraftConfigRow;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -80,6 +104,36 @@ impl<'ctx> __sdk::Table for BarkBattleDraftConfigTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for BarkBattleDraftConfigTableHandle<'ctx> {
|
||||
type InsertCallbackId = BarkBattleDraftConfigInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattleDraftConfigInsertCallbackId {
|
||||
BarkBattleDraftConfigInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: BarkBattleDraftConfigInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for BarkBattleDraftConfigTableHandle<'ctx> {
|
||||
type DeleteCallbackId = BarkBattleDraftConfigDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattleDraftConfigDeleteCallbackId {
|
||||
BarkBattleDraftConfigDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: BarkBattleDraftConfigDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct BarkBattleDraftConfigUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for BarkBattleDraftConfigTableHandle<'ctx> {
|
||||
@@ -97,6 +151,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for BarkBattleDraftConfigTableHandle<'ctx>
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for BarkBattleDraftConfigTableHandle<'ctx> {
|
||||
type UpdateCallbackId = BarkBattleDraftConfigUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattleDraftConfigUpdateCallbackId {
|
||||
BarkBattleDraftConfigUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: BarkBattleDraftConfigUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `draft_id` unique index on the table `bark_battle_draft_config`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`BarkBattleDraftConfigDraftIdUnique::find`] method.
|
||||
|
||||
+69
@@ -18,6 +18,18 @@ pub struct BarkBattleLeaderboardEntryTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `bark_battle_leaderboard_entry`.
|
||||
pub struct BarkBattleLeaderboardEntryTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for BarkBattleLeaderboardEntryTableAccessor {
|
||||
type Row = BarkBattleLeaderboardEntryRow;
|
||||
type Handle<'db> = BarkBattleLeaderboardEntryTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.bark_battle_leaderboard_entry()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `bark_battle_leaderboard_entry`.
|
||||
///
|
||||
@@ -42,6 +54,18 @@ impl BarkBattleLeaderboardEntryTableAccess for super::RemoteTables {
|
||||
pub struct BarkBattleLeaderboardEntryInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct BarkBattleLeaderboardEntryDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for BarkBattleLeaderboardEntryTableHandle<'ctx> {
|
||||
type Row = BarkBattleLeaderboardEntryRow;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = BarkBattleLeaderboardEntryRow> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for BarkBattleLeaderboardEntryTableHandle<'ctx> {
|
||||
type Row = BarkBattleLeaderboardEntryRow;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -80,6 +104,36 @@ impl<'ctx> __sdk::Table for BarkBattleLeaderboardEntryTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for BarkBattleLeaderboardEntryTableHandle<'ctx> {
|
||||
type InsertCallbackId = BarkBattleLeaderboardEntryInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattleLeaderboardEntryInsertCallbackId {
|
||||
BarkBattleLeaderboardEntryInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: BarkBattleLeaderboardEntryInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for BarkBattleLeaderboardEntryTableHandle<'ctx> {
|
||||
type DeleteCallbackId = BarkBattleLeaderboardEntryDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattleLeaderboardEntryDeleteCallbackId {
|
||||
BarkBattleLeaderboardEntryDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: BarkBattleLeaderboardEntryDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct BarkBattleLeaderboardEntryUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for BarkBattleLeaderboardEntryTableHandle<'ctx> {
|
||||
@@ -97,6 +151,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for BarkBattleLeaderboardEntryTableHandle<
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for BarkBattleLeaderboardEntryTableHandle<'ctx> {
|
||||
type UpdateCallbackId = BarkBattleLeaderboardEntryUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattleLeaderboardEntryUpdateCallbackId {
|
||||
BarkBattleLeaderboardEntryUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: BarkBattleLeaderboardEntryUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `leaderboard_entry_id` unique index on the table `bark_battle_leaderboard_entry`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`BarkBattleLeaderboardEntryLeaderboardEntryIdUnique::find`] method.
|
||||
|
||||
+69
@@ -18,6 +18,18 @@ pub struct BarkBattlePersonalBestProjectionTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `bark_battle_personal_best_projection`.
|
||||
pub struct BarkBattlePersonalBestProjectionTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for BarkBattlePersonalBestProjectionTableAccessor {
|
||||
type Row = BarkBattlePersonalBestProjectionRow;
|
||||
type Handle<'db> = BarkBattlePersonalBestProjectionTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.bark_battle_personal_best_projection()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `bark_battle_personal_best_projection`.
|
||||
///
|
||||
@@ -46,6 +58,18 @@ impl BarkBattlePersonalBestProjectionTableAccess for super::RemoteTables {
|
||||
pub struct BarkBattlePersonalBestProjectionInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct BarkBattlePersonalBestProjectionDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for BarkBattlePersonalBestProjectionTableHandle<'ctx> {
|
||||
type Row = BarkBattlePersonalBestProjectionRow;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = BarkBattlePersonalBestProjectionRow> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for BarkBattlePersonalBestProjectionTableHandle<'ctx> {
|
||||
type Row = BarkBattlePersonalBestProjectionRow;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -84,6 +108,36 @@ impl<'ctx> __sdk::Table for BarkBattlePersonalBestProjectionTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for BarkBattlePersonalBestProjectionTableHandle<'ctx> {
|
||||
type InsertCallbackId = BarkBattlePersonalBestProjectionInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattlePersonalBestProjectionInsertCallbackId {
|
||||
BarkBattlePersonalBestProjectionInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: BarkBattlePersonalBestProjectionInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for BarkBattlePersonalBestProjectionTableHandle<'ctx> {
|
||||
type DeleteCallbackId = BarkBattlePersonalBestProjectionDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattlePersonalBestProjectionDeleteCallbackId {
|
||||
BarkBattlePersonalBestProjectionDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: BarkBattlePersonalBestProjectionDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct BarkBattlePersonalBestProjectionUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for BarkBattlePersonalBestProjectionTableHandle<'ctx> {
|
||||
@@ -101,6 +155,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for BarkBattlePersonalBestProjectionTableH
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for BarkBattlePersonalBestProjectionTableHandle<'ctx> {
|
||||
type UpdateCallbackId = BarkBattlePersonalBestProjectionUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattlePersonalBestProjectionUpdateCallbackId {
|
||||
BarkBattlePersonalBestProjectionUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: BarkBattlePersonalBestProjectionUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `personal_best_id` unique index on the table `bark_battle_personal_best_projection`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`BarkBattlePersonalBestProjectionPersonalBestIdUnique::find`] method.
|
||||
|
||||
+69
@@ -18,6 +18,18 @@ pub struct BarkBattlePublishedConfigTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `bark_battle_published_config`.
|
||||
pub struct BarkBattlePublishedConfigTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for BarkBattlePublishedConfigTableAccessor {
|
||||
type Row = BarkBattlePublishedConfigRow;
|
||||
type Handle<'db> = BarkBattlePublishedConfigTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.bark_battle_published_config()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `bark_battle_published_config`.
|
||||
///
|
||||
@@ -42,6 +54,18 @@ impl BarkBattlePublishedConfigTableAccess for super::RemoteTables {
|
||||
pub struct BarkBattlePublishedConfigInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct BarkBattlePublishedConfigDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for BarkBattlePublishedConfigTableHandle<'ctx> {
|
||||
type Row = BarkBattlePublishedConfigRow;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = BarkBattlePublishedConfigRow> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for BarkBattlePublishedConfigTableHandle<'ctx> {
|
||||
type Row = BarkBattlePublishedConfigRow;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -80,6 +104,36 @@ impl<'ctx> __sdk::Table for BarkBattlePublishedConfigTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for BarkBattlePublishedConfigTableHandle<'ctx> {
|
||||
type InsertCallbackId = BarkBattlePublishedConfigInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattlePublishedConfigInsertCallbackId {
|
||||
BarkBattlePublishedConfigInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: BarkBattlePublishedConfigInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for BarkBattlePublishedConfigTableHandle<'ctx> {
|
||||
type DeleteCallbackId = BarkBattlePublishedConfigDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattlePublishedConfigDeleteCallbackId {
|
||||
BarkBattlePublishedConfigDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: BarkBattlePublishedConfigDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct BarkBattlePublishedConfigUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for BarkBattlePublishedConfigTableHandle<'ctx> {
|
||||
@@ -97,6 +151,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for BarkBattlePublishedConfigTableHandle<'
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for BarkBattlePublishedConfigTableHandle<'ctx> {
|
||||
type UpdateCallbackId = BarkBattlePublishedConfigUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattlePublishedConfigUpdateCallbackId {
|
||||
BarkBattlePublishedConfigUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: BarkBattlePublishedConfigUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `work_id` unique index on the table `bark_battle_published_config`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`BarkBattlePublishedConfigWorkIdUnique::find`] method.
|
||||
|
||||
+69
@@ -18,6 +18,18 @@ pub struct BarkBattleRuntimeRunTableHandle<'ctx> {
|
||||
ctx: std::marker::PhantomData<&'ctx super::RemoteTables>,
|
||||
}
|
||||
|
||||
/// Lifetime-aware accessor marker for the table `bark_battle_runtime_run`.
|
||||
pub struct BarkBattleRuntimeRunTableAccessor;
|
||||
|
||||
impl __sdk::TableAccessor<super::RemoteTables> for BarkBattleRuntimeRunTableAccessor {
|
||||
type Row = BarkBattleRuntimeRunRow;
|
||||
type Handle<'db> = BarkBattleRuntimeRunTableHandle<'db>;
|
||||
|
||||
fn get<'db>(db: &'db super::RemoteTables) -> Self::Handle<'db> {
|
||||
db.bark_battle_runtime_run()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
/// Extension trait for access to the table `bark_battle_runtime_run`.
|
||||
///
|
||||
@@ -42,6 +54,18 @@ impl BarkBattleRuntimeRunTableAccess for super::RemoteTables {
|
||||
pub struct BarkBattleRuntimeRunInsertCallbackId(__sdk::CallbackId);
|
||||
pub struct BarkBattleRuntimeRunDeleteCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableLike for BarkBattleRuntimeRunTableHandle<'ctx> {
|
||||
type Row = BarkBattleRuntimeRunRow;
|
||||
type EventContext = super::EventContext;
|
||||
|
||||
fn count(&self) -> u64 {
|
||||
self.imp.count()
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = BarkBattleRuntimeRunRow> + '_ {
|
||||
self.imp.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::Table for BarkBattleRuntimeRunTableHandle<'ctx> {
|
||||
type Row = BarkBattleRuntimeRunRow;
|
||||
type EventContext = super::EventContext;
|
||||
@@ -80,6 +104,36 @@ impl<'ctx> __sdk::Table for BarkBattleRuntimeRunTableHandle<'ctx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithInsert for BarkBattleRuntimeRunTableHandle<'ctx> {
|
||||
type InsertCallbackId = BarkBattleRuntimeRunInsertCallbackId;
|
||||
|
||||
fn on_insert(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattleRuntimeRunInsertCallbackId {
|
||||
BarkBattleRuntimeRunInsertCallbackId(self.imp.on_insert(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_insert(&self, callback: BarkBattleRuntimeRunInsertCallbackId) {
|
||||
self.imp.remove_on_insert(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithDelete for BarkBattleRuntimeRunTableHandle<'ctx> {
|
||||
type DeleteCallbackId = BarkBattleRuntimeRunDeleteCallbackId;
|
||||
|
||||
fn on_delete(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattleRuntimeRunDeleteCallbackId {
|
||||
BarkBattleRuntimeRunDeleteCallbackId(self.imp.on_delete(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_delete(&self, callback: BarkBattleRuntimeRunDeleteCallbackId) {
|
||||
self.imp.remove_on_delete(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct BarkBattleRuntimeRunUpdateCallbackId(__sdk::CallbackId);
|
||||
|
||||
impl<'ctx> __sdk::TableWithPrimaryKey for BarkBattleRuntimeRunTableHandle<'ctx> {
|
||||
@@ -97,6 +151,21 @@ impl<'ctx> __sdk::TableWithPrimaryKey for BarkBattleRuntimeRunTableHandle<'ctx>
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> __sdk::WithUpdate for BarkBattleRuntimeRunTableHandle<'ctx> {
|
||||
type UpdateCallbackId = BarkBattleRuntimeRunUpdateCallbackId;
|
||||
|
||||
fn on_update(
|
||||
&self,
|
||||
callback: impl FnMut(&Self::EventContext, &Self::Row, &Self::Row) + Send + 'static,
|
||||
) -> BarkBattleRuntimeRunUpdateCallbackId {
|
||||
BarkBattleRuntimeRunUpdateCallbackId(self.imp.on_update(Box::new(callback)))
|
||||
}
|
||||
|
||||
fn remove_on_update(&self, callback: BarkBattleRuntimeRunUpdateCallbackId) {
|
||||
self.imp.remove_on_update(callback.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Access to the `run_id` unique index on the table `bark_battle_runtime_run`,
|
||||
/// which allows point queries on the field of the same name
|
||||
/// via the [`BarkBattleRuntimeRunRunIdUnique::find`] method.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user