Function fromDot [src]

Prototype

pub fn fromDot(dot_notation: []const u8, out: []u8) InitError!Oid

Parameters

dot_notation: []const u8out: []u8

Possible Errors

InvalidCharacter ParseIntError

The input was empty or contained an invalid character

MissingPrefix
Overflow ParseIntError

The result cannot fit in the type specified

Example

test fromDot { var buf: [256]u8 = undefined; for (test_cases) |t| { const actual = try fromDot(t.dot_notation, &buf); try std.testing.expectEqualSlices(u8, t.encoded, actual.encoded); } }

Source

pub fn fromDot(dot_notation: []const u8, out: []u8) InitError!Oid { var split = std.mem.splitScalar(u8, dot_notation, '.'); const first_str = split.next() orelse return error.MissingPrefix; const second_str = split.next() orelse return error.MissingPrefix; const first = try std.fmt.parseInt(u8, first_str, 10); const second = try std.fmt.parseInt(u8, second_str, 10); var stream = std.io.fixedBufferStream(out); var writer = stream.writer(); try writer.writeByte(first * 40 + second); var i: usize = 1; while (split.next()) |s| { var parsed = try std.fmt.parseUnsigned(Arc, s, 10); const n_bytes = if (parsed == 0) 0 else std.math.log(Arc, encoding_base, parsed); for (0..n_bytes) |j| { const place = std.math.pow(Arc, encoding_base, n_bytes - @as(Arc, @intCast(j))); const digit: u8 = @intCast(@divFloor(parsed, place)); try writer.writeByte(digit | 0x80); parsed -= digit * place; i += 1; } try writer.writeByte(@intCast(parsed)); i += 1; } return .{ .encoded = stream.getWritten() }; }