Class: GrpcKit::Session::Duration

Inherits:
Struct
  • Object
show all
Defined in:
lib/grpc_kit/session/duration.rb

Constant Summary collapse

MAX_TIMEOUT =
10**9 - 1
HOUR =
60 * 60
MIN =
60
MILL_SEC =
10**-3
MICRO_SEC =
10**-6
NANO_SEC =
10**-9

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#msecObject

Returns the value of attribute msec

Returns:

  • (Object)

    the current value of msec



5
6
7
# File 'lib/grpc_kit/session/duration.rb', line 5

def msec
  @msec
end

#nsecObject

Returns the value of attribute nsec

Returns:

  • (Object)

    the current value of nsec



5
6
7
# File 'lib/grpc_kit/session/duration.rb', line 5

def nsec
  @nsec
end

#secObject

Returns the value of attribute sec

Returns:

  • (Object)

    the current value of sec



5
6
7
# File 'lib/grpc_kit/session/duration.rb', line 5

def sec
  @sec
end

#usecObject

Returns the value of attribute usec

Returns:

  • (Object)

    the current value of usec



5
6
7
# File 'lib/grpc_kit/session/duration.rb', line 5

def usec
  @usec
end

Class Method Details

.decode(value) ⇒ Object



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
# File 'lib/grpc_kit/session/duration.rb', line 14

def self.decode(value)
  size = value.size
  if size < 2
    raise "Invalid format: too short #{value}"
  end

  unit = value.slice!(-1, 1)
  d = Duration.new(0, 0, 0, 0)
  n = Integer(value)

  case unit
  when 'H'
    d.sec = n * HOUR
  when 'M'
    d.sec = n * MIN
  when 'S'
    d.sec = n
  when 'm'
    d.msec = n
  when 'u'
    d.usec = n
  when 'n'
    d.nsec = n
  else
    raise "Invalid unit `#{unit}`: #{value + unit} "
  end
  d
end

.from_numeric(val) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/grpc_kit/session/duration.rb', line 66

def self.from_numeric(val)
  case val
  when nil
  when Numeric
    if val < 0
      Duration.new(MAX_TIMEOUT, 0, 0, 0)
    elsif val == 0
      Duration.new(0, 0, 0, 0)
    else
      Duration.new(val, 0, 0, 0)
    end
  else
    raise "Cannot make timeout from #{val}"
  end
end

Instance Method Details

#to_sObject

TODO



83
84
85
86
87
88
89
90
91
92
93
# File 'lib/grpc_kit/session/duration.rb', line 83

def to_s
  if nsec && (nsec != 0)
    "#{nsec}n"
  elsif usec && (usec != 0)
    "#{usec}u"
  elsif msec && (msec != 0)
    "#{msec}m"
  elsif sec
    "#{sec}S"
  end
end

#to_timeoutObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/grpc_kit/session/duration.rb', line 43

def to_timeout
  v = 0

  if nsec && (nsec != 0)
    v += (NANO_SEC * nsec)
  end

  if usec && (usec != 0)
    v += (MICRO_SEC * usec)
  end

  if msec && (msec != 0)
    v += (MILL_SEC * msec)
  end

  if sec
    v += sec
  end

  v
end