51 lines
1.2 KiB
Rust
51 lines
1.2 KiB
Rust
pub mod store;
|
|
|
|
use super::*;
|
|
use crate::bounded::BoundedVec;
|
|
use radicle::node::PROTOCOL_VERSION;
|
|
|
|
pub use store::{AnnouncementId, Error, RelayStatus, Store};
|
|
|
|
pub fn node(config: &Config, timestamp: Timestamp) -> NodeAnnouncement {
|
|
let features = config.features();
|
|
let alias = config.alias.clone();
|
|
let addresses: BoundedVec<_, ADDRESS_LIMIT> = config
|
|
.external_addresses
|
|
.clone()
|
|
.try_into()
|
|
.expect("external addresses are within the limit");
|
|
|
|
let agent = config.user_agent();
|
|
|
|
let version = PROTOCOL_VERSION;
|
|
|
|
NodeAnnouncement {
|
|
features,
|
|
version,
|
|
timestamp,
|
|
alias,
|
|
addresses,
|
|
nonce: 0,
|
|
agent,
|
|
}
|
|
}
|
|
|
|
pub fn inventory(
|
|
timestamp: Timestamp,
|
|
inventory: impl IntoIterator<Item = RepoId>,
|
|
) -> InventoryAnnouncement {
|
|
let inventory = inventory.into_iter().collect::<Vec<_>>();
|
|
if inventory.len() > INVENTORY_LIMIT {
|
|
warn!(
|
|
target: "service",
|
|
"inventory announcement limit ({}) exceeded, other nodes will see only some of your projects",
|
|
inventory.len()
|
|
);
|
|
}
|
|
|
|
InventoryAnnouncement {
|
|
inventory: BoundedVec::truncate(inventory),
|
|
timestamp,
|
|
}
|
|
}
|