1// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
2//
3// SPDX-License-Identifier: AGPL-3.0-or-later
4
5package lunatask
6
7import (
8 "errors"
9 "fmt"
10 "strings"
11)
12
13// RelationshipStrength categorizes the closeness of a relationship.
14type RelationshipStrength string
15
16// Valid relationship strength values.
17const (
18 RelationshipFamily RelationshipStrength = "family"
19 RelationshipIntimateFriend RelationshipStrength = "intimate-friends"
20 RelationshipCloseFriend RelationshipStrength = "close-friends"
21 // RelationshipCasualFriend is the default if not specified.
22 RelationshipCasualFriend RelationshipStrength = "casual-friends"
23 RelationshipAcquaintance RelationshipStrength = "acquaintances"
24 RelationshipBusiness RelationshipStrength = "business-contacts"
25 RelationshipAlmostStranger RelationshipStrength = "almost-strangers"
26)
27
28// Errors returned by RelationshipStrength operations.
29var (
30 // ErrInvalidRelationshipStrength is returned when parsing an unknown relationship strength string.
31 ErrInvalidRelationshipStrength = errors.New("invalid relationship strength")
32)
33
34// String returns the relationship strength value as a string.
35func (r RelationshipStrength) String() string {
36 return string(r)
37}
38
39// ParseRelationshipStrength parses a string to a RelationshipStrength value (case-insensitive).
40// Valid values: "family", "intimate-friends", "close-friends", "casual-friends",
41// "acquaintances", "business-contacts", "almost-strangers".
42func ParseRelationshipStrength(str string) (RelationshipStrength, error) {
43 switch strings.ToLower(str) {
44 case "family":
45 return RelationshipFamily, nil
46 case "intimate-friends":
47 return RelationshipIntimateFriend, nil
48 case "close-friends":
49 return RelationshipCloseFriend, nil
50 case "casual-friends":
51 return RelationshipCasualFriend, nil
52 case "acquaintances":
53 return RelationshipAcquaintance, nil
54 case "business-contacts":
55 return RelationshipBusiness, nil
56 case "almost-strangers":
57 return RelationshipAlmostStranger, nil
58 default:
59 return "", fmt.Errorf("%w: %q", ErrInvalidRelationshipStrength, str)
60 }
61}