aboutsummaryrefslogtreecommitdiff
path: root/forged/internal/irc/source.go
blob: d955f45652cde1dbf74bb22385793f517c08e9f1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org>

package irc

import (
	"bytes"

	"go.lindenii.runxiyu.org/forge/forged/internal/misc"
)

type Source interface {
	AsSourceString() string
}

func parseSource(s []byte) Source {
	nick, userhost, found := bytes.Cut(s, []byte{'!'})
	if !found {
		return Server{name: misc.BytesToString(s)}
	}

	user, host, found := bytes.Cut(userhost, []byte{'@'})
	if !found {
		return Server{name: misc.BytesToString(s)}
	}

	return Client{
		Nick: misc.BytesToString(nick),
		User: misc.BytesToString(user),
		Host: misc.BytesToString(host),
	}
}

type Server struct {
	name string
}

func (s Server) AsSourceString() string {
	return s.name
}

type Client struct {
	Nick string
	User string
	Host string
}

func (c Client) AsSourceString() string {
	return c.Nick + "!" + c.User + "@" + c.Host
}