aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/exess/src/timezone.h
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/exess/src/timezone.h')
-rw-r--r--subprojects/exess/src/timezone.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/subprojects/exess/src/timezone.h b/subprojects/exess/src/timezone.h
new file mode 100644
index 00000000..b10c2483
--- /dev/null
+++ b/subprojects/exess/src/timezone.h
@@ -0,0 +1,59 @@
+/*
+ Copyright 2021 David Robillard <d@drobilla.net>
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#ifndef EXESS_TIMEZONE_H
+#define EXESS_TIMEZONE_H
+
+#include "exess/exess.h"
+
+#include <stddef.h>
+
+/// The maximum length of a canonical timezone string, 6
+#define EXESS_MAX_TIMEZONE_LENGTH 6
+
+/**
+ Read a timezone string after any leading whitespace.
+
+ @param out Set to the parsed value, or false on error.
+ @param str String input.
+ @return The `count` of characters read, and a `status` code.
+*/
+EXESS_API
+ExessResult
+exess_read_timezone(ExessTimezone* EXESS_NONNULL out,
+ const char* EXESS_NONNULL str);
+
+/**
+ Write a canonical timezone suffix.
+
+ The output is always in canonical form, either `Z` for UTC or a signed hour
+ and minute offset with leading zeros, like `-05:30` or `+14:00`.
+
+ @param value Value to write.
+ @param buf_size The size of `buf` in bytes.
+ @param buf Output buffer, or null to only measure.
+ @param o The current write offset in `buf`
+
+ @return #EXESS_SUCCESS on success, #EXESS_NO_SPACE if the buffer is too
+ small, or #EXESS_BAD_VALUE if the value is invalid.
+*/
+ExessResult
+write_timezone(ExessTimezone value,
+ size_t buf_size,
+ char* EXESS_NULLABLE buf,
+ size_t o);
+
+#endif // EXESS_TIMEZONE_H