Completed
Push — master ( 61d444...b3f358 )
by Jan
16s queued 14s
created

src/frames/frame-popm.ts   A

Complexity

Total Complexity 3
Complexity/F 0

Size

Lines of Code 35
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 26
mnd 3
bc 3
fnc 0
dl 0
loc 35
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import { FrameBuilder } from "../FrameBuilder"
2
import { FrameReader } from "../FrameReader"
3
import type { Data } from "./type"
4
5
export const POPM = {
6
    create: (data: Data) => {
7
        const email = data.email
8
        let rating = Math.trunc(data.rating)
9
        let counter = Math.trunc(data.counter)
10
        if(!email) {
11
            return null
12
        }
13
        if(isNaN(rating) || rating < 0 || rating > 255) {
14
            rating = 0
15
        }
16
        if(isNaN(counter) || counter < 0) {
17
            counter = 0
18
        }
19
20
        return new FrameBuilder("POPM")
21
            .appendNullTerminatedValue(email)
22
            .appendNumber(rating, 1)
23
            .appendNumber(counter, 4)
24
            .getBuffer()
25
    },
26
    read: (buffer: Buffer) => {
27
        const reader = new FrameReader(buffer)
28
        return {
29
            email: reader.consumeNullTerminatedValue('string'),
30
            rating: reader.consumeStaticValue('number', 1),
31
            counter: reader.consumeStaticValue('number')
32
        }
33
    }
34
}
35