GitRoot

Craft your forge, Build your project, Grow your community freely
 1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
 2//
 3// SPDX-License-Identifier: MIT
 4
 5package model
 6
 7import (
 8	"time"
 9
10	"github.com/tidwall/gjson"
11)
12
13type Commit struct {
14	Branch           string    `json:"branch"`
15	Hash             string    `json:"hash"`
16	Message          string    `json:"message"`
17	Date             time.Time `json:"date"`
18	CommitterEmail   string    `json:"committerEmail"`
19	CommitterName    string    `json:"committerName"`
20	ParentHash       string    `json:"parentHash"`
21	IsSigned         bool      `json:"isSigned"`
22	IsValidSignature bool      `json:"isValidSignature"`
23	SigningKey       string    `json:"signingKey"`
24}
25
26func commitFromGjson(j gjson.Result) Commit {
27	return Commit{
28		Branch:           j.Get("branch").String(),
29		Hash:             j.Get("hash").String(),
30		Message:          j.Get("message").String(),
31		Date:             j.Get("date").Time(),
32		CommitterEmail:   j.Get("committerEmail").String(),
33		CommitterName:    j.Get("committerName").String(),
34		ParentHash:       j.Get("parentHash").String(),
35		IsSigned:         j.Get("isSigned").Bool(),
36		IsValidSignature: j.Get("isValidSignature").Bool(),
37		SigningKey:       j.Get("signingKey").String(),
38	}
39}
40
41func CommitFromString(commit string) Commit {
42	return commitFromGjson(gjson.Parse(commit))
43}
44
45func CommitsFromString(commits string) []Commit {
46	jsonCommits := gjson.Parse(commits).Array()
47	res := make([]Commit, len(jsonCommits))
48	for i, jsonCommit := range jsonCommits {
49		res[i] = commitFromGjson(jsonCommit)
50	}
51	return res
52}