Files
Genarrative/server-rs/crates/spacetime-client/src/assets.rs
kdletters 052d656a52 修复公开资产授权一致性与签名期限
公开资产 metadata 和作品授权改为在同一 SpacetimeDB 事务快照中判断
移除连接级公开授权订阅缓存对 ACL 的参与
公开读取签名有效期上限固定为 600 秒并保留 owner 和 admin 行为
同步生成 bindings 并更新后端契约与项目记忆
2026-07-13 20:04:29 +08:00

142 lines
5.1 KiB
Rust

use super::*;
impl SpacetimeClient {
pub async fn list_asset_history(
&self,
input: module_assets::AssetHistoryListInput,
) -> Result<Vec<AssetHistoryEntryRecord>, SpacetimeClientError> {
let procedure_input = input.into();
self.call_after_connect(
"list_asset_history_and_return",
move |connection, sender| {
connection.procedures().list_asset_history_and_return_then(
procedure_input,
move |_, result| {
let mapped = result
.map_err(SpacetimeClientError::from_sdk_error)
.and_then(map_asset_history_list_result);
send_once(&sender, mapped);
},
);
},
)
.await
}
pub async fn confirm_asset_object(
&self,
input: module_assets::AssetObjectUpsertInput,
) -> Result<AssetObjectRecord, SpacetimeClientError> {
let procedure_input = input.into();
self.call_after_connect(
"confirm_asset_object_and_return",
move |connection, sender| {
connection
.procedures()
.confirm_asset_object_and_return_then(procedure_input, move |_, result| {
let mapped = result
.map_err(SpacetimeClientError::from_sdk_error)
.and_then(map_procedure_result);
send_once(&sender, mapped);
});
},
)
.await
}
pub async fn get_asset_object(
&self,
asset_object_id: String,
) -> Result<Option<AssetObjectRecord>, SpacetimeClientError> {
self.call_after_connect(
"get_asset_object_by_id_and_return",
move |connection, sender| {
connection
.procedures()
.get_asset_object_by_id_and_return_then(asset_object_id, move |_, result| {
let mapped = result
.map_err(SpacetimeClientError::from_sdk_error)
.and_then(map_optional_asset_object_procedure_result);
send_once(&sender, mapped);
});
},
)
.await
}
pub async fn get_asset_object_by_location(
&self,
input: module_assets::AssetObjectLocationInput,
) -> Result<Option<AssetObjectRecord>, SpacetimeClientError> {
let procedure_input = input.into();
self.call_after_connect(
"get_asset_object_by_location_and_return",
move |connection, sender| {
connection
.procedures()
.get_asset_object_by_location_and_return_then(
procedure_input,
move |_, result| {
let mapped = result
.map_err(SpacetimeClientError::from_sdk_error)
.and_then(map_optional_asset_object_procedure_result);
send_once(&sender, mapped);
},
);
},
)
.await
}
pub async fn get_asset_read_access_by_location(
&self,
input: module_assets::AssetObjectLocationInput,
) -> Result<(Option<AssetObjectRecord>, bool), SpacetimeClientError> {
let procedure_input = input.into();
self.call_after_connect(
"get_asset_read_access_by_location_and_return",
move |connection, sender| {
connection
.procedures()
.get_asset_read_access_by_location_and_return_then(
procedure_input,
move |_, result| {
let mapped = result
.map_err(SpacetimeClientError::from_sdk_error)
.and_then(map_asset_read_access_procedure_result);
send_once(&sender, mapped);
},
);
},
)
.await
}
pub async fn bind_asset_object_to_entity(
&self,
input: module_assets::AssetEntityBindingInput,
) -> Result<AssetEntityBindingRecord, SpacetimeClientError> {
let procedure_input = input.into();
self.call_after_connect(
"bind_asset_object_to_entity_and_return",
move |connection, sender| {
connection
.procedures()
.bind_asset_object_to_entity_and_return_then(
procedure_input,
move |_, result| {
let mapped = result
.map_err(SpacetimeClientError::from_sdk_error)
.and_then(map_entity_binding_procedure_result);
send_once(&sender, mapped);
},
);
},
)
.await
}
}