1
0

fix memory tid

This commit is contained in:
2026-03-01 15:56:29 +09:00
parent 8b0af49817
commit 9c8907fd5c

View File

@@ -7,18 +7,20 @@ use std::time::{SystemTime, UNIX_EPOCH};
use crate::core::{config, reader}; use crate::core::{config, reader};
fn generate_tid() -> String { fn generate_tid() -> String {
// ATProto TID: 64-bit integer as 13 base32-sortable chars
// bit 63: always 0 (sign), bits 62..10: timestamp (microseconds), bits 9..0: clock_id
const CHARSET: &[u8] = b"234567abcdefghijklmnopqrstuvwxyz"; const CHARSET: &[u8] = b"234567abcdefghijklmnopqrstuvwxyz";
let micros = SystemTime::now() let micros = SystemTime::now()
.duration_since(UNIX_EPOCH) .duration_since(UNIX_EPOCH)
.unwrap() .unwrap()
.as_micros() as u64; .as_micros() as u64;
let mut tid = [0u8; 13]; let v = (micros << 10) & 0x7FFFFFFFFFFFFFFF;
let mut v = micros; let mut tid = String::with_capacity(13);
for i in (0..13).rev() { for i in (0..13).rev() {
tid[i] = CHARSET[(v & 0x1f) as usize]; let idx = ((v >> (i * 5)) & 0x1f) as usize;
v >>= 5; tid.push(CHARSET[idx] as char);
} }
String::from_utf8(tid.to_vec()).unwrap() tid
} }
fn next_version() -> u64 { fn next_version() -> u64 {