Make rust-sdk findable trait using Result

In order to stop using `unwrap` and `expect` we need to change `Findable`
trait and make `get_ep` and `list_ep` return Result instead. This change
is expected to fail initially, but the content would be taken directly
to the `openstack_sdk` where it will be applied together with the
corresponding interface change.

Change-Id: Idc2452d0b481f0fd55f9573bcc8b50102c278c99
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
This commit is contained in:
Artem Goncharov
2025-11-11 13:09:40 +01:00
parent 6ef5acf7d3
commit 2ff8837172

View File

@@ -20,8 +20,8 @@ use http::{HeaderMap, HeaderName, HeaderValue};
use crate::api::find::Findable;
use crate::api::rest_endpoint_prelude::*;
{%- if not name_filter_supported %}
use crate::api::{ApiError, RestClient};
{%- if not name_filter_supported %}
use tracing::trace;
{%- endif %}
@@ -84,7 +84,7 @@ where
impl<'a> Findable for Request<'a> {
type G = Get::Request<'a>;
type L = List::Request{{ list_lifetime }};
fn get_ep(&self) -> Get::Request<'a> {
fn get_ep<C: RestClient>(&self) -> Result<Get::Request<'a>, ApiError<C::Error>> {
let mut ep = Get::Request::builder();
ep.id(self.id.clone());
{%- for k, param in type_manager.parameters.items() %}
@@ -93,11 +93,11 @@ impl<'a> Findable for Request<'a> {
if let Some(headers) = &self._headers {
ep.headers(headers.iter().map(|(k, v)| (Some(k.clone()), v.clone())));
}
ep.build().unwrap()
ep.build().map_err(|err| ApiError::endpoint_builder(err))
}
{%- if name_filter_supported %}
fn list_ep(&self) -> List::Request{{ list_lifetime }} {
{% if name_filter_supported -%}
fn list_ep<C: RestClient>(&self) -> Result<List::Request{{ list_lifetime }}, ApiError<C::Error>> {
let mut ep = List::Request::builder();
{%- for k, param in type_manager.parameters.items() %}
ep.{{ param.remote_name }}(self.{{ param.local_name}}.clone());
@@ -106,10 +106,10 @@ impl<'a> Findable for Request<'a> {
ep.headers(headers.iter().map(|(k, v)| (Some(k.clone()), v.clone())));
}
ep.{{ name_field }}(self.id.clone());
ep.build().unwrap()
ep.build().map_err(|err| ApiError::endpoint_builder(err))
}
{%- else %}
fn list_ep(&self) -> List::Request{{ list_lifetime }} {
{% else %}
fn list_ep<C: RestClient>(&self) -> Result<List::Request{{ list_lifetime }}, ApiError<C::Error>> {
let mut ep = List::Request::builder();
{%- for k, param in type_manager.parameters.items() %}
ep.{{ param.remote_name }}(self.{{ param.local_name}}.clone());
@@ -117,7 +117,7 @@ impl<'a> Findable for Request<'a> {
if let Some(headers) = &self._headers {
ep.headers(headers.iter().map(|(k, v)| (Some(k.clone()), v.clone())));
}
ep.build().unwrap()
ep.build().map_err(|err| ApiError::endpoint_builder(err))
}
{%- endif %}
{%- if not name_filter_supported %}