use crate::adapter::net::behavior::meshos::DaemonRef;
use crate::adapter::net::cortex::workflow::TaskId;
const TASK_DOMAIN: u64 = 0x7461_736B_5F69_6431;
const SHARD_DOMAIN: u64 = 0x7368_6172_645F_6964;
const fn splitmix64(seed: u64) -> u64 {
let mut z = seed.wrapping_add(0x9E37_79B9_7F4A_7C15);
z = (z ^ (z >> 30)).wrapping_mul(0xBF58_476D_1CE4_E5B9);
z = (z ^ (z >> 27)).wrapping_mul(0x94D0_49BB_1331_11EB);
z ^ (z >> 31)
}
fn encode_task_ref(task: TaskId) -> u64 {
splitmix64(TASK_DOMAIN ^ task)
}
fn encode_shard_ref(parent: TaskId, shard_index: u16) -> u64 {
let folded_parent = splitmix64(SHARD_DOMAIN ^ parent);
splitmix64(folded_parent ^ shard_index as u64)
}
pub fn daemon_ref(task: TaskId) -> DaemonRef {
DaemonRef {
id: encode_task_ref(task),
name: format!("task/{task}"),
}
}
pub fn daemon_ref_shard(parent: TaskId, shard_index: u16) -> DaemonRef {
DaemonRef {
id: encode_shard_ref(parent, shard_index),
name: format!("task/{parent}/shard/{shard_index}"),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn task_refs_are_distinct_namespaced_and_readable() {
let a = daemon_ref(1);
let b = daemon_ref(2);
assert_ne!(a.id, b.id, "distinct tasks → distinct ids");
assert_eq!(a.name, "task/1");
assert_eq!(b.name, "task/2");
assert_ne!(daemon_ref(1).id, 1);
assert_ne!(daemon_ref(2).id, 2);
}
#[test]
fn task_ref_is_stable_across_calls_so_retries_are_invisible() {
assert_eq!(daemon_ref(7), daemon_ref(7));
assert_eq!(daemon_ref_shard(7, 3), daemon_ref_shard(7, 3));
}
#[test]
fn shard_refs_distinguish_index_and_parent() {
let s0 = daemon_ref_shard(10, 0);
let s1 = daemon_ref_shard(10, 1);
let other_parent = daemon_ref_shard(11, 0);
assert_ne!(s0.id, s1.id, "same parent, different shard index");
assert_ne!(s0.id, other_parent.id, "different parent, same index");
assert_eq!(s0.name, "task/10/shard/0");
assert_eq!(s1.name, "task/10/shard/1");
}
#[test]
fn task_and_shard_id_spaces_do_not_overlap_for_related_inputs() {
assert_ne!(daemon_ref(10).id, daemon_ref_shard(10, 0).id);
assert_ne!(daemon_ref(0).id, daemon_ref_shard(0, 0).id);
}
}