Browse Source

help: Range for uint8_t

Serj Kalichev 11 months ago
parent
commit
16b5eb3e50
1 changed files with 53 additions and 29 deletions
  1. 53 29
      src/pline.c

+ 53 - 29
src/pline.c

@@ -7,6 +7,7 @@
 #include <string.h>
 #include <assert.h>
 #include <syslog.h>
+#include <limits.h>
 
 #include <faux/faux.h>
 #include <faux/str.h>
@@ -812,6 +813,42 @@ static void pline_print_type_completions(const struct lysc_type *type)
 }
 
 
+static void uint_range(const struct lysc_type *type, uint64_t def_min, uint64_t def_max)
+{
+	uint64_t min = def_min;
+	uint64_t max = def_max;
+	struct lysc_range *range = ((struct lysc_type_num *)type)->range;
+	char *r = NULL;
+
+	if (range) {
+		min = range->parts->min_u64;
+		max = range->parts->max_u64;
+	}
+
+	r = faux_str_sprintf("[%" PRIu64 "..%" PRIu64 "]", min, max);
+	printf("%s\n", r ? r : "<uint>");
+	faux_free(r);
+}
+
+
+static void int_range(const struct lysc_type *type, int64_t def_min, int64_t def_max)
+{
+	int64_t min = def_min;
+	int64_t max = def_max;
+	struct lysc_range *range = ((struct lysc_type_num *)type)->range;
+	char *r = NULL;
+
+	if (range) {
+		min = range->parts->min_64;
+		max = range->parts->max_64;
+	}
+
+	r = faux_str_sprintf("[%" PRId64 "..%" PRId64 "]", min, max);
+	printf("%s\n", r ? r : "<uint>");
+	faux_free(r);
+}
+
+
 static void pline_print_type_help(const struct lysc_node *node,
 	const struct lysc_type *type)
 {
@@ -848,70 +885,57 @@ static void pline_print_type_help(const struct lysc_node *node,
 	} else {
 		switch (type->basetype) {
 
-		case LY_TYPE_UINT8: {
-			printf("<uint8>\n");
+		case LY_TYPE_UINT8:
+			uint_range(type, 0, UCHAR_MAX);
 			break;
-		}
 
-		case LY_TYPE_UINT16: {
-			printf("<uint16>\n");
+		case LY_TYPE_UINT16:
+			uint_range(type, 0, USHRT_MAX);
 			break;
-		}
 
-		case LY_TYPE_UINT32: {
+		case LY_TYPE_UINT32:
 			printf("<uint32>\n");
 			break;
-		}
 
-		case LY_TYPE_UINT64: {
+		case LY_TYPE_UINT64:
 			printf("<uint64>\n");
 			break;
-		}
 
-		case LY_TYPE_INT8: {
-			printf("<int8>\n");
+		case LY_TYPE_INT8:
+			int_range(type, CHAR_MIN, CHAR_MAX);
 			break;
-		}
 
-		case LY_TYPE_INT16: {
+		case LY_TYPE_INT16:
 			printf("<int16>\n");
 			break;
-		}
 
-		case LY_TYPE_INT32: {
+		case LY_TYPE_INT32:
 			printf("<int32>\n");
 			break;
-		}
 
-		case LY_TYPE_INT64: {
+		case LY_TYPE_INT64:
 			printf("<int64>\n");
 			break;
-		}
 
-		case LY_TYPE_STRING: {
+		case LY_TYPE_STRING:
 			printf("<string>\n");
 			break;
-		}
 
-		case LY_TYPE_BOOL: {
+		case LY_TYPE_BOOL:
 			printf("<true/false>\n");
 			break;
-		}
 
-		case LY_TYPE_DEC64: {
+		case LY_TYPE_DEC64:
 			printf("<number>\n");
 			break;
-		}
 
-		case LY_TYPE_ENUM: {
+		case LY_TYPE_ENUM:
 			printf("Enumerated choice\n");
 			break;
-		}
 
-		case LY_TYPE_IDENT: {
+		case LY_TYPE_IDENT:
 			printf("Identity\n");
 			break;
-		}
 
 		default:
 			printf("<unknown>\n");