1
0
mirror of https://github.com/pcvolkmer/mv64e-kafka-to-rest-gateway synced 2025-09-13 09:12:52 +00:00

refactor: use if let instead of match

This commit is contained in:
2025-09-06 13:01:16 +02:00
parent eea3a7d6cf
commit 28e57e11c8

View File

@@ -53,7 +53,9 @@ fn extract_request_id(msg: &BorrowedMessage) -> Option<String> {
None => None, None => None,
Some(headers) => { Some(headers) => {
if let Some(value) = headers if let Some(value) = headers
.iter().find(|header| header.key == "requestId")?.value .iter()
.find(|header| header.key == "requestId")?
.value
{ {
match str::from_utf8(value) { match str::from_utf8(value) {
Ok(value) => Some(value.to_string()), Ok(value) => Some(value.to_string()),
@@ -68,7 +70,7 @@ fn extract_request_id(msg: &BorrowedMessage) -> Option<String> {
fn client_config() -> ClientConfig { fn client_config() -> ClientConfig {
let mut client_config = ClientConfig::new(); let mut client_config = ClientConfig::new();
client_config.set("bootstrap.servers", &CONFIG.bootstrap_servers.to_string()); client_config.set("bootstrap.servers", &CONFIG.bootstrap_servers);
if CONFIG.ssl_cert_file.is_some() || CONFIG.ssl_key_file.is_some() { if CONFIG.ssl_cert_file.is_some() || CONFIG.ssl_key_file.is_some() {
client_config client_config
@@ -134,73 +136,71 @@ async fn main() -> Result<(), Box<dyn Error>> {
.create()?; .create()?;
while let Ok(msg) = consumer.recv().await { while let Ok(msg) = consumer.recv().await {
match msg.payload_view::<str>() { if let Some(Ok(payload)) = msg.payload_view::<str>() {
Some(Ok(payload)) => match msg.key_view::<str>() { if let Some(Ok(key)) = msg.key_view::<str>() {
Some(Ok(key)) => { let payload = if let Ok(payload) = serde_json::from_str::<Mtb>(payload) {
let payload = if let Ok(payload) = serde_json::from_str::<Mtb>(&payload) { payload
payload } else {
} else { error!("Error deserializing payload");
error!("Error deserializing payload"); continue;
continue; };
};
let request_id = extract_request_id(&msg).unwrap_or_default(); let request_id = extract_request_id(&msg).unwrap_or_default();
match handle_record(payload).await { match handle_record(payload).await {
Err(err) => error!("{}", err), Err(err) => error!("{}", err),
Ok(response) => { Ok(response) => {
let response_payload = ResponsePayload { let response_payload = ResponsePayload {
request_id: request_id.to_string(), request_id: request_id.to_string(),
status_code: response.status_code, status_code: response.status_code,
status_body: serde_json::from_str::<Value>(&response.status_body) status_body: serde_json::from_str::<Value>(&response.status_body)
.unwrap_or(json!({})), .unwrap_or(json!({})),
}; };
let response_payload = serde_json::to_string(&response_payload)?; let response_payload = serde_json::to_string(&response_payload)?;
let response_record = FutureRecord::to(&CONFIG.response_topic) let response_record = FutureRecord::to(&CONFIG.response_topic)
.key(key) .key(key)
.payload(&response_payload); .payload(&response_payload);
match if let Some(headers) = msg.headers() { match if let Some(headers) = msg.headers() {
producer producer
.send( .send(
response_record.headers(headers.detach()), response_record.headers(headers.detach()),
Duration::from_secs(1), Duration::from_secs(1),
) )
.await .await
} else { } else {
producer.send(response_record, Duration::from_secs(1)).await producer.send(response_record, Duration::from_secs(1)).await
} { } {
Ok(_) => { Ok(_) => {
info!("Response for '{request_id}' sent successfully"); info!("Response for '{request_id}' sent successfully");
}
Err((err, _)) => {
error!("Could not send response for '{request_id}': {err}");
}
} }
Err((err, _)) => {
if response.status_code == 200 error!("Could not send response for '{request_id}': {err}");
|| response.status_code == 201
|| response.status_code == 400
|| response.status_code == 422
{
consumer
.commit_message(&msg, CommitMode::Async)
.expect("Cound not commit message: {}");
} else {
warn!(
"Unexpected Status Code for Request '{}': HTTP {}",
&request_id, response.status_code
);
} }
} }
if response.status_code == 200
|| response.status_code == 201
|| response.status_code == 400
|| response.status_code == 422
{
consumer.commit_message(&msg, CommitMode::Async)?;
} else {
warn!(
"Unexpected Status Code for Request '{}': HTTP {}",
&request_id, response.status_code
);
}
} }
} }
_ => error!("Error getting key"), } else {
}, error!("Error getting key");
_ => error!("Error getting payload"), }
} else {
error!("Error getting payload");
} }
}; }
Ok(()) Ok(())
} }