Hunter0x7c7
2022-08-11 b8230139fb40edea387617b6accd8371e37eda58
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
package protocol
 
import "github.com/v2fly/v2ray-core/v5/common/serial"
 
func (u *User) GetTypedAccount() (Account, error) {
    if u.GetAccount() == nil {
        return nil, newError("Account missing").AtWarning()
    }
 
    rawAccount, err := serial.GetInstanceOf(u.Account)
    if err != nil {
        return nil, err
    }
    if asAccount, ok := rawAccount.(AsAccount); ok {
        return asAccount.AsAccount()
    }
    if account, ok := rawAccount.(Account); ok {
        return account, nil
    }
    return nil, newError("Unknown account type: ", serial.V2Type(u.Account))
}
 
func (u *User) ToMemoryUser() (*MemoryUser, error) {
    account, err := u.GetTypedAccount()
    if err != nil {
        return nil, err
    }
    return &MemoryUser{
        Account: account,
        Email:   u.Email,
        Level:   u.Level,
    }, nil
}
 
// MemoryUser is a parsed form of User, to reduce number of parsing of Account proto.
type MemoryUser struct {
    // Account is the parsed account of the protocol.
    Account Account
    Email   string
    Level   uint32
}