first pass of merging in warp (doesn't build)
This commit is contained in:
@@ -0,0 +1,169 @@
|
||||
use cloud_object_persistence::{
|
||||
CloudObjectReadContext, id_from_metadata, read_generic_string_object_rows,
|
||||
to_cloud_object_metadata,
|
||||
};
|
||||
use cloud_objects::cloud_object::{
|
||||
GENERIC_STRING_OBJECT_PREFIX, GenericStringObjectFormat, JSON_OBJECT_PREFIX, JsonObjectType,
|
||||
ObjectType,
|
||||
};
|
||||
use cloud_objects::ids::GenericStringObjectId;
|
||||
use diesel::SqliteConnection;
|
||||
use diesel::result::Error;
|
||||
|
||||
use crate::{
|
||||
CloudAIExecutionProfile, CloudAIExecutionProfileModel, CloudAIFact, CloudAIFactModel,
|
||||
CloudAmbientAgentEnvironment, CloudAmbientAgentEnvironmentModel, CloudEnvVarCollection,
|
||||
CloudEnvVarCollectionModel, CloudMCPServer, CloudMCPServerModel, CloudPreference,
|
||||
CloudPreferenceModel, CloudScheduledAmbientAgent, CloudScheduledAmbientAgentModel,
|
||||
CloudTemplatableMCPServer, CloudTemplatableMCPServerModel, CloudWorkflowEnum,
|
||||
CloudWorkflowEnumModel,
|
||||
};
|
||||
|
||||
pub enum PersistedGenericStringObject {
|
||||
Preference(CloudPreference),
|
||||
EnvVarCollection(CloudEnvVarCollection),
|
||||
WorkflowEnum(CloudWorkflowEnum),
|
||||
AIFact(CloudAIFact),
|
||||
MCPServer(CloudMCPServer),
|
||||
TemplatableMCPServer(CloudTemplatableMCPServer),
|
||||
AIExecutionProfile(CloudAIExecutionProfile),
|
||||
CloudEnvironment(CloudAmbientAgentEnvironment),
|
||||
ScheduledAmbientAgent(CloudScheduledAmbientAgent),
|
||||
}
|
||||
|
||||
pub fn read_generic_string_objects(
|
||||
conn: &mut SqliteConnection,
|
||||
read_context: &CloudObjectReadContext,
|
||||
) -> Result<Vec<PersistedGenericStringObject>, Error> {
|
||||
Ok(read_generic_string_object_rows(conn)?
|
||||
.into_iter()
|
||||
.filter_map(|object| {
|
||||
let metadata = read_context.metadata_for_object(
|
||||
object.id,
|
||||
ObjectType::GenericStringObject(GenericStringObjectFormat::Json(
|
||||
JsonObjectType::Preference,
|
||||
)),
|
||||
)?;
|
||||
let object_id = id_from_metadata::<GenericStringObjectId>(metadata)?;
|
||||
let cloud_object_permissions = read_context.permissions_for_metadata(metadata)?;
|
||||
let json_object_type: JsonObjectType = metadata
|
||||
.object_type
|
||||
.strip_prefix(&format!(
|
||||
"{GENERIC_STRING_OBJECT_PREFIX}{JSON_OBJECT_PREFIX}"
|
||||
))?
|
||||
.try_into()
|
||||
.ok()?;
|
||||
match json_object_type {
|
||||
JsonObjectType::Preference => {
|
||||
let model = CloudPreferenceModel::deserialize_owned(&object.data);
|
||||
model.ok().map(|model| {
|
||||
PersistedGenericStringObject::Preference(CloudPreference::new(
|
||||
object_id,
|
||||
model,
|
||||
to_cloud_object_metadata(metadata),
|
||||
cloud_object_permissions,
|
||||
))
|
||||
})
|
||||
}
|
||||
JsonObjectType::EnvVarCollection => {
|
||||
let model = CloudEnvVarCollectionModel::deserialize_owned(&object.data);
|
||||
model.ok().map(|model| {
|
||||
PersistedGenericStringObject::EnvVarCollection(CloudEnvVarCollection::new(
|
||||
object_id,
|
||||
model,
|
||||
to_cloud_object_metadata(metadata),
|
||||
cloud_object_permissions,
|
||||
))
|
||||
})
|
||||
}
|
||||
JsonObjectType::WorkflowEnum => {
|
||||
let model = CloudWorkflowEnumModel::deserialize_owned(&object.data);
|
||||
model.ok().map(|model| {
|
||||
PersistedGenericStringObject::WorkflowEnum(CloudWorkflowEnum::new(
|
||||
object_id,
|
||||
model,
|
||||
to_cloud_object_metadata(metadata),
|
||||
cloud_object_permissions,
|
||||
))
|
||||
})
|
||||
}
|
||||
JsonObjectType::AIFact => {
|
||||
let model = CloudAIFactModel::deserialize_owned(&object.data);
|
||||
model.ok().map(|model| {
|
||||
PersistedGenericStringObject::AIFact(CloudAIFact::new(
|
||||
object_id,
|
||||
model,
|
||||
to_cloud_object_metadata(metadata),
|
||||
cloud_object_permissions,
|
||||
))
|
||||
})
|
||||
}
|
||||
JsonObjectType::MCPServer => {
|
||||
let model = CloudMCPServerModel::deserialize_owned(&object.data);
|
||||
model.ok().map(|model| {
|
||||
PersistedGenericStringObject::MCPServer(CloudMCPServer::new(
|
||||
object_id,
|
||||
model,
|
||||
to_cloud_object_metadata(metadata),
|
||||
cloud_object_permissions,
|
||||
))
|
||||
})
|
||||
}
|
||||
JsonObjectType::TemplatableMCPServer => {
|
||||
let model = CloudTemplatableMCPServerModel::deserialize_owned(&object.data);
|
||||
model.ok().map(|model| {
|
||||
PersistedGenericStringObject::TemplatableMCPServer(
|
||||
CloudTemplatableMCPServer::new(
|
||||
object_id,
|
||||
model,
|
||||
to_cloud_object_metadata(metadata),
|
||||
cloud_object_permissions,
|
||||
),
|
||||
)
|
||||
})
|
||||
}
|
||||
JsonObjectType::AIExecutionProfile => {
|
||||
let model = CloudAIExecutionProfileModel::deserialize_owned(&object.data);
|
||||
model.ok().map(|model| {
|
||||
PersistedGenericStringObject::AIExecutionProfile(
|
||||
CloudAIExecutionProfile::new(
|
||||
object_id,
|
||||
model,
|
||||
to_cloud_object_metadata(metadata),
|
||||
cloud_object_permissions,
|
||||
),
|
||||
)
|
||||
})
|
||||
}
|
||||
JsonObjectType::CloudEnvironment => {
|
||||
let model = CloudAmbientAgentEnvironmentModel::deserialize_owned(&object.data);
|
||||
model.ok().map(|model| {
|
||||
PersistedGenericStringObject::CloudEnvironment(
|
||||
CloudAmbientAgentEnvironment::new(
|
||||
object_id,
|
||||
model,
|
||||
to_cloud_object_metadata(metadata),
|
||||
cloud_object_permissions,
|
||||
),
|
||||
)
|
||||
})
|
||||
}
|
||||
JsonObjectType::ScheduledAmbientAgent => {
|
||||
let model = CloudScheduledAmbientAgentModel::deserialize_owned(&object.data);
|
||||
model.ok().map(|model| {
|
||||
PersistedGenericStringObject::ScheduledAmbientAgent(
|
||||
CloudScheduledAmbientAgent::new(
|
||||
object_id,
|
||||
model,
|
||||
to_cloud_object_metadata(metadata),
|
||||
cloud_object_permissions,
|
||||
),
|
||||
)
|
||||
})
|
||||
}
|
||||
// TODO: Implement CloudAgentConfig model when full sync support is added
|
||||
JsonObjectType::CloudAgentConfig => None,
|
||||
}
|
||||
})
|
||||
.collect())
|
||||
}
|
||||
Reference in New Issue
Block a user