mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 07:04:33 +00:00
Explicitly use various Response structs; fix issue with not returning entity id in bevy/spawn requests
This commit is contained in:
parent
50552c0311
commit
9cad01ea3a
1 changed files with 17 additions and 13 deletions
|
@ -238,7 +238,7 @@ pub fn process_remote_get_request(In(params): In<Option<Value>>, world: &World)
|
||||||
let type_registry = app_type_registry.read();
|
let type_registry = app_type_registry.read();
|
||||||
let entity_ref = get_entity(world, entity)?;
|
let entity_ref = get_entity(world, entity)?;
|
||||||
|
|
||||||
let mut serialized_components_map = HashMap::new();
|
let mut response = BrpGetResponse::default();
|
||||||
|
|
||||||
for component_path in components {
|
for component_path in components {
|
||||||
let reflect_component = get_reflect_component(&type_registry, &component_path)
|
let reflect_component = get_reflect_component(&type_registry, &component_path)
|
||||||
|
@ -266,10 +266,10 @@ pub fn process_remote_get_request(In(params): In<Option<Value>>, world: &World)
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
serialized_components_map.extend(serialized_object.into_iter());
|
response.extend(serialized_object.into_iter());
|
||||||
}
|
}
|
||||||
|
|
||||||
serde_json::to_value(serialized_components_map).map_err(BrpError::internal)
|
serde_json::to_value(response).map_err(BrpError::internal)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handles a `bevy/query` request coming from a client.
|
/// Handles a `bevy/query` request coming from a client.
|
||||||
|
@ -335,7 +335,7 @@ pub fn process_remote_query_request(In(params): In<Option<Value>>, world: &mut W
|
||||||
.collect::<AnyhowResult<Vec<(&str, &ReflectComponent)>>>()
|
.collect::<AnyhowResult<Vec<(&str, &ReflectComponent)>>>()
|
||||||
.map_err(BrpError::component_error)?;
|
.map_err(BrpError::component_error)?;
|
||||||
|
|
||||||
let mut rows = vec![];
|
let mut response = BrpQueryResponse::default();
|
||||||
let mut query = query.build();
|
let mut query = query.build();
|
||||||
for row in query.iter(world) {
|
for row in query.iter(world) {
|
||||||
// The map of component values:
|
// The map of component values:
|
||||||
|
@ -351,14 +351,14 @@ pub fn process_remote_query_request(In(params): In<Option<Value>>, world: &mut W
|
||||||
row.clone(),
|
row.clone(),
|
||||||
has_paths_and_reflect_components.iter().copied(),
|
has_paths_and_reflect_components.iter().copied(),
|
||||||
);
|
);
|
||||||
rows.push(BrpQueryRow {
|
response.push(BrpQueryRow {
|
||||||
entity: row.id(),
|
entity: row.id(),
|
||||||
components: components_map,
|
components: components_map,
|
||||||
has: has_map,
|
has: has_map,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
serde_json::to_value(rows).map_err(BrpError::internal)
|
serde_json::to_value(response).map_err(BrpError::internal)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handles a `bevy/spawn` request coming from a client.
|
/// Handles a `bevy/spawn` request coming from a client.
|
||||||
|
@ -370,10 +370,14 @@ pub fn process_remote_spawn_request(In(params): In<Option<Value>>, world: &mut W
|
||||||
|
|
||||||
let reflect_components =
|
let reflect_components =
|
||||||
deserialize_components(&type_registry, components).map_err(BrpError::component_error)?;
|
deserialize_components(&type_registry, components).map_err(BrpError::component_error)?;
|
||||||
insert_reflected_components(&type_registry, world.spawn_empty(), reflect_components)
|
|
||||||
|
let entity = world.spawn_empty();
|
||||||
|
let entity_id = entity.id();
|
||||||
|
insert_reflected_components(&type_registry, entity, reflect_components)
|
||||||
.map_err(BrpError::component_error)?;
|
.map_err(BrpError::component_error)?;
|
||||||
|
|
||||||
Ok(Value::Null)
|
let response = BrpSpawnResponse { entity: entity_id };
|
||||||
|
serde_json::to_value(response).map_err(BrpError::internal)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handles a `bevy/insert` request (insert components) coming from a client.
|
/// Handles a `bevy/insert` request (insert components) coming from a client.
|
||||||
|
@ -469,7 +473,7 @@ pub fn process_remote_list_request(In(params): In<Option<Value>>, world: &World)
|
||||||
let app_type_registry = world.resource::<AppTypeRegistry>();
|
let app_type_registry = world.resource::<AppTypeRegistry>();
|
||||||
let type_registry = app_type_registry.read();
|
let type_registry = app_type_registry.read();
|
||||||
|
|
||||||
let mut result = vec![];
|
let mut response = BrpListResponse::default();
|
||||||
|
|
||||||
// If `Some`, return all components of the provided entity.
|
// If `Some`, return all components of the provided entity.
|
||||||
if let Some(BrpListParams { entity }) = params.map(parse).transpose()? {
|
if let Some(BrpListParams { entity }) = params.map(parse).transpose()? {
|
||||||
|
@ -478,23 +482,23 @@ pub fn process_remote_list_request(In(params): In<Option<Value>>, world: &World)
|
||||||
let Some(component_info) = world.components().get_info(component_id) else {
|
let Some(component_info) = world.components().get_info(component_id) else {
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
result.push(component_info.name().to_owned());
|
response.push(component_info.name().to_owned());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If `None`, list all registered components.
|
// If `None`, list all registered components.
|
||||||
else {
|
else {
|
||||||
for registered_type in type_registry.iter() {
|
for registered_type in type_registry.iter() {
|
||||||
if registered_type.data::<ReflectComponent>().is_some() {
|
if registered_type.data::<ReflectComponent>().is_some() {
|
||||||
result.push(registered_type.type_info().type_path().to_owned());
|
response.push(registered_type.type_info().type_path().to_owned());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort both for cleanliness and to reduce the risk that clients start
|
// Sort both for cleanliness and to reduce the risk that clients start
|
||||||
// accidentally depending on the order.
|
// accidentally depending on the order.
|
||||||
result.sort();
|
response.sort();
|
||||||
|
|
||||||
serde_json::to_value(result).map_err(BrpError::internal)
|
serde_json::to_value(response).map_err(BrpError::internal)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Immutably retrieves an entity from the [`World`], returning an error if the
|
/// Immutably retrieves an entity from the [`World`], returning an error if the
|
||||||
|
|
Loading…
Reference in a new issue