Skip to content

Commit

Permalink
AmqpOrderedMap contains_key, get, and remove take impl PartialEq<K> r…
Browse files Browse the repository at this point in the history
…ather than &K
  • Loading branch information
LarryOsterman committed Nov 7, 2024
1 parent 2247665 commit a599ddc
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 33 deletions.
4 changes: 2 additions & 2 deletions sdk/core/azure_core_amqp/src/receiver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,9 +213,9 @@ mod tests {
);
assert!(receiver_options.properties.is_some());
let properties = receiver_options.properties.clone().unwrap();
assert!(properties.contains_key(&AmqpSymbol::from("key")));
assert!(properties.contains_key("key"));
assert_eq!(
*properties.get(&AmqpSymbol::from("key")).unwrap(),
*properties.get("key").unwrap(),
AmqpValue::String("value".to_string())
);
}
Expand Down
4 changes: 2 additions & 2 deletions sdk/core/azure_core_amqp/src/sender.rs
Original file line number Diff line number Diff line change
Expand Up @@ -245,9 +245,9 @@ mod tests {
);
assert!(sender_options.properties.is_some());
let properties = sender_options.properties.clone().unwrap();
assert!(properties.contains_key(&AmqpSymbol::from("key")));
assert!(properties.contains_key("key"));
assert_eq!(
*properties.get(&AmqpSymbol::from("key")).unwrap(),
*properties.get("key").unwrap(),
AmqpValue::String("value".to_string())
);

Expand Down
2 changes: 1 addition & 1 deletion sdk/core/azure_core_amqp/src/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ mod tests {
);
assert!(session_options.properties.is_some());
let properties = session_options.properties.clone().unwrap();
assert!(properties.contains_key(&AmqpSymbol::from("key")));
assert!(properties.contains_key("key"));
assert_eq!(
*properties.get(&AmqpSymbol::from("key")).unwrap(),
AmqpValue::String("value".to_string())
Expand Down
44 changes: 31 additions & 13 deletions sdk/core/azure_core_amqp/src/value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,24 @@ impl PartialEq<&str> for AmqpSymbol {
}
}

impl PartialEq<AmqpSymbol> for &str {
fn eq(&self, other: &AmqpSymbol) -> bool {
*self == other.0
}
}

impl PartialEq<&AmqpSymbol> for AmqpSymbol {
fn eq(&self, other: &&AmqpSymbol) -> bool {
self.0 == other.0
}
}

impl PartialEq<AmqpSymbol> for &AmqpSymbol {
fn eq(&self, other: &AmqpSymbol) -> bool {
self.0 == other.0
}
}

impl From<String> for AmqpSymbol {
fn from(s: String) -> Self {
AmqpSymbol(s)
Expand Down Expand Up @@ -267,10 +285,10 @@ where
self.inner.push((key, value));
}

pub fn get(&self, key: &K) -> Option<&V> {
pub fn get(&self, key: impl PartialEq<K>) -> Option<&V> {
self.inner
.iter()
.find_map(|(k, v)| if k == key { Some(v) } else { None })
.find_map(|(k, v)| if key == *k { Some(v) } else { None })
}

pub fn len(&self) -> usize {
Expand All @@ -281,13 +299,13 @@ where
self.inner.is_empty()
}

pub fn remove(&mut self, key: &K) -> Option<V> {
let index = self.inner.iter().position(|(k, _)| k == key)?;
pub fn remove(&mut self, key: impl PartialEq<K>) -> Option<V> {
let index = self.inner.iter().position(|(k, _)| key == *k)?;
Some(self.inner.remove(index).1)
}

pub fn contains_key(&self, key: &K) -> bool {
self.inner.iter().any(|(k, _)| k == key)
pub fn contains_key(&self, key: impl PartialEq<K>) -> bool {
self.inner.iter().any(|(k, _)| key == *k)
}

pub fn iter(&self) -> impl Iterator<Item = (K, V)> + '_ {
Expand Down Expand Up @@ -625,14 +643,14 @@ mod tests {
map.insert("key2", 2);
map.insert("key3", 3);

assert_eq!(map.get(&"key1"), Some(&1));
assert_eq!(map.get(&"key2"), Some(&2));
assert_eq!(map.get(&"key3"), Some(&3));
assert_eq!(map.get(&"key4"), None);
assert_eq!(map.get("key1"), Some(&1));
assert_eq!(map.get("key2"), Some(&2));
assert_eq!(map.get("key3"), Some(&3));
assert_eq!(map.get("key4"), None);

assert_eq!(map.remove(&"key1"), Some(1));
assert_eq!(map.remove(&"key1"), None);
assert_eq!(map.get(&"key1"), None);
assert_eq!(map.remove("key1"), Some(1));
assert_eq!(map.remove("key1"), None);
assert_eq!(map.get("key1"), None);
}

#[allow(clippy::approx_constant)]
Expand Down
29 changes: 14 additions & 15 deletions sdk/eventhubs/azure_messaging_eventhubs/src/common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@ impl ManagementInstance {
.call(EVENTHUB_ENTITY_TYPE.to_string(), application_properties)
.await?;

if !response.contains_key(&EVENTHUB_PROPERTY_PARTITION_COUNT.to_string()) {
if !response.contains_key(EVENTHUB_PROPERTY_PARTITION_COUNT) {
return Err(ErrorKind::InvalidManagementResponse.into());
}
let name: String = response
.get(&EVENTHUB_PROPERTY_NAME.into())
.get(EVENTHUB_PROPERTY_NAME)
.ok_or_else(|| azure_core::Error::from(ErrorKind::InvalidManagementResponse))?
.clone()
.into();
let created_at: Option<SystemTime> = Into::<AmqpTimestamp>::into(
response
.get(&EVENTHUB_PROPERTY_CREATED_AT.into())
.get(EVENTHUB_PROPERTY_CREATED_AT)
.ok_or_else(|| azure_core::Error::from(ErrorKind::InvalidManagementResponse))?
.clone(),
)
Expand All @@ -71,7 +71,7 @@ impl ManagementInstance {
// Into::<i32>::into(response.get("partition_count".to_string()).ok_or_else(|| azure_core::Error::from(ErrorKind::InvalidManagementResponse))?.clone());

let partition_ids = response
.get(&EVENTHUB_PROPERTY_PARTITION_IDS.into())
.get(EVENTHUB_PROPERTY_PARTITION_IDS)
.ok_or_else(|| azure_core::Error::from(ErrorKind::InvalidManagementResponse))?;

let partition_ids = match partition_ids {
Expand Down Expand Up @@ -106,50 +106,49 @@ impl ManagementInstance {
.await?;

// Look for the required response properties
if !response.contains_key(&EVENTHUB_PARTITION_PROPERTIES_TYPE.to_string())
|| !response.contains_key(
&EVENTHUB_PARTITION_PROPERTIES_LAST_ENQUEUED_SEQUENCE_NUMBER_EPOCH.to_string(),
)
if !response.contains_key(EVENTHUB_PARTITION_PROPERTIES_TYPE)
|| !response
.contains_key(EVENTHUB_PARTITION_PROPERTIES_LAST_ENQUEUED_SEQUENCE_NUMBER_EPOCH)
{
return Err(ErrorKind::InvalidManagementResponse.into());
}

Ok(EventHubPartitionProperties {
beginning_sequence_number: response
.get(&EVENTHUB_PARTITION_PROPERTIES_BEGIN_SEQUENCE_NUMBER.into())
.get(EVENTHUB_PARTITION_PROPERTIES_BEGIN_SEQUENCE_NUMBER)
.ok_or_else(|| azure_core::Error::from(ErrorKind::InvalidManagementResponse))?
.clone()
.into(),
id: response
.get(&EVENTHUB_PROPERTY_PARTITION.into())
.get(EVENTHUB_PROPERTY_PARTITION)
.ok_or_else(|| azure_core::Error::from(ErrorKind::InvalidManagementResponse))?
.clone()
.into(),
eventhub: response
.get(&EVENTHUB_PROPERTY_NAME.into())
.get(EVENTHUB_PROPERTY_NAME)
.ok_or_else(|| azure_core::Error::from(ErrorKind::InvalidManagementResponse))?
.clone()
.into(),

last_enqueued_sequence_number: response
.get(&EVENTHUB_PARTITION_PROPERTIES_LAST_ENQUEUED_SEQUENCE_NUMBER.into())
.get(EVENTHUB_PARTITION_PROPERTIES_LAST_ENQUEUED_SEQUENCE_NUMBER)
.ok_or_else(|| azure_core::Error::from(ErrorKind::InvalidManagementResponse))?
.clone()
.into(),
last_enqueued_offset: response
.get(&EVENTHUB_PARTITION_PROPERTIES_LAST_ENQUEUED_OFFSET.into())
.get(EVENTHUB_PARTITION_PROPERTIES_LAST_ENQUEUED_OFFSET)
.ok_or_else(|| azure_core::Error::from(ErrorKind::InvalidManagementResponse))?
.clone()
.into(),
last_enqueued_time_utc: Into::<AmqpTimestamp>::into(
response
.get(&EVENTHUB_PARTITION_PROPERTIES_LAST_ENQUEUED_TIME_UTC.into())
.get(EVENTHUB_PARTITION_PROPERTIES_LAST_ENQUEUED_TIME_UTC)
.ok_or_else(|| azure_core::Error::from(ErrorKind::InvalidManagementResponse))?
.clone(),
)
.0,
is_empty: response
.get(&EVENTHUB_PARTITION_PROPERTIES_IS_EMPTY.into())
.get(EVENTHUB_PARTITION_PROPERTIES_IS_EMPTY)
.ok_or_else(|| azure_core::Error::from(ErrorKind::InvalidManagementResponse))?
.clone()
.into(),
Expand Down

0 comments on commit a599ddc

Please sign in to comment.