2 * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.binding.contract;
10 import static com.google.common.base.Verify.verify;
11 import static java.util.Objects.requireNonNull;
13 import org.eclipse.jdt.annotation.NonNull;
16 * <a href="https://www.rfc-editor.org/rfc/rfc6020#section-6.2.1">YANG statement namespaces</a> which we process.
18 public enum StatementNamespace {
20 * The namespace of all {@code feature} statements, bullet 3.
24 * The namespace of all {@code identity} statements, bullet 4.
28 * The namespace of all {@code typedef} statements, bullet 5.
32 * The namespace of all {@code grouping} statements, bullet 6.
36 * The namespace of all RFC8040 {@code ietf-restconf:yang-data} statements. These sit outside of the usual YANG
37 * statement namespaces, but may overlap in the usual case when template names conform to YANG {@code identifier}
42 * The namespace for {@code augment} statements. These are specific to Java Binding.
50 CONTAINER("$CO", true),
54 LEAF_LIST("$LL", true),
56 * The namespace for a {@code list}'s {@code key} statement. This typically does not conflict, but could in case of
59 * list foo { // results Foo
60 * key bar; // triggers FooKey as a sibling to Foo
66 * container foo-key; // results in FooKey
69 * In this case the key-derived FooKey gets shifted to {@code $KE}.
72 NOTIFICATION("$NO", true),
76 * The namespace for a {@code module}'s data root interface. This typically does not conflict, but could in case of
78 * module foo { // results in FooData
79 * container foo-data; // results in FooData as well
82 * In this case the module-derived FooData gets shifted to {@code $D}.
84 DATA_ROOT("$D", true);
86 private final @NonNull String suffix;
87 private final boolean resistant;
89 StatementNamespace(final @NonNull String suffix) {
93 StatementNamespace(final @NonNull String suffix, final boolean resistant) {
94 verify(!suffix.isEmpty());
95 this.suffix = requireNonNull(suffix);
96 this.resistant = resistant;
99 public @NonNull String suffix() {
103 public boolean resistant() {