From: Patrick Steinhardt Date: Tue, 28 Oct 2025 09:17:03 GMT Subject: Re: [PATCH 04/14] rust: add a ObjectID struct Message-ID: In-Reply-To: <20251027004404.2152927-5-sandals@crustytoothpaste.net> On Mon, Oct 27, 2025 at 12:43:54AM +0000, brian m. carlson wrote: > diff --git a/src/hash.rs b/src/hash.rs > new file mode 100644 > index 0000000000..0219391820 > --- /dev/null > +++ b/src/hash.rs > @@ -0,0 +1,21 @@ > +// This program is free software; you can redistribute it and/or modify > +// it under the terms of the GNU General Public License as published by > +// the Free Software Foundation: version 2 of the License, dated June 1991. > +// > +// This program is distributed in the hope that it will be useful, > +// but WITHOUT ANY WARRANTY; without even the implied warranty of > +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +// GNU General Public License for more details. > +// > +// You should have received a copy of the GNU General Public License along > +// with this program; if not, see . We typically don't have these headers for our C code, so why have it over here? > +pub const GIT_MAX_RAWSZ: usize = 32; > + > +/// A binary object ID. > +#[repr(C)] > +#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq)] > +pub struct ObjectID { > + pub hash: [u8; GIT_MAX_RAWSZ], > + pub algo: u32, > +} An alternative to represent this type would be to use an enum: pub enum ObjectID { SHA1([u8; GIT_SHA1_RAWSZ]), SHA256([u8; GIT_SHA256_RAWSZ]), } That would give us some type safety going forward, but it might be harder to work with for us? Patrick