Umbrella type + dispatch for git's four object kinds: Blob,
Tree, Commit, Tag. Each has its own struct in
Exgit.Object.*; this module is the common entry point for
decode/encode/sha/type across all of them.
Decoding (decode/2) is tagged: pass the type atom plus raw
object bytes, receive back {:ok, struct} or {:error, _}.
Decoders never raise on untrusted input — see
Exgit.Security.DecoderFuzzTest for the regression corpus.
Summary
Types
@type object_type() :: :blob | :tree | :commit | :tag
@type sha() :: <<_::160>>
@type t() :: Exgit.Object.Blob.t() | Exgit.Object.Tree.t() | Exgit.Object.Commit.t() | Exgit.Object.Tag.t()