1/*
2 * Copyright (c) 2014-2019 Pavel Kalvoda <me@pavelkalvoda.com>
3 *
4 * libcbor is free software; you can redistribute it and/or modify
5 * it under the terms of the MIT license. See LICENSE for details.
6 */
7
8#include "tags.h"
9
10cbor_item_t *cbor_new_tag(uint64_t value) {
11  cbor_item_t *item = _CBOR_MALLOC(sizeof(cbor_item_t));
12  _CBOR_NOTNULL(item);
13
14  *item = (cbor_item_t){
15      .refcount = 1,
16      .type = CBOR_TYPE_TAG,
17      .metadata = {.tag_metadata = {.value = value, .tagged_item = NULL}},
18      .data = NULL /* Never used */
19  };
20  return item;
21}
22
23cbor_item_t *cbor_tag_item(const cbor_item_t *item) {
24  assert(cbor_isa_tag(item));
25  return item->metadata.tag_metadata.tagged_item;
26}
27
28uint64_t cbor_tag_value(const cbor_item_t *item) {
29  assert(cbor_isa_tag(item));
30  return item->metadata.tag_metadata.value;
31}
32
33void cbor_tag_set_item(cbor_item_t *item, cbor_item_t *tagged_item) {
34  assert(cbor_isa_tag(item));
35  cbor_incref(tagged_item);
36  item->metadata.tag_metadata.tagged_item = tagged_item;
37}
38
39cbor_item_t *cbor_build_tag(uint64_t value, cbor_item_t *item) {
40  cbor_item_t *res = cbor_new_tag(value);
41  cbor_tag_set_item(res, item);
42  return res;
43}
44