From abdf4853a743105dbe93002aa580ae6bcd0abf91 Mon Sep 17 00:00:00 2001
From: David Symonds <dsymonds@golang.org>
Date: Thu, 7 May 2009 15:09:32 -0700
Subject: [PATCH] Define Len() for JSON Map.

R=rsc
APPROVED=rsc
DELTA=6  (5 added, 0 deleted, 1 changed)
OCL=28398
CL=28430
---
 src/lib/json/generic.go      | 3 ++-
 src/lib/json/generic_test.go | 4 ++++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/lib/json/generic.go b/src/lib/json/generic.go
index 4393e4d080..e3194eb17f 100644
--- a/src/lib/json/generic.go
+++ b/src/lib/json/generic.go
@@ -33,7 +33,7 @@ type Json interface {
 	Bool() bool;		// boolean (BoolKind)
 	Get(s string) Json;	// field lookup (MapKind)
 	Elem(i int) Json;	// element lookup (ArrayKind)
-	Len() int;		// length (ArrayKind)
+	Len() int;		// length (ArrayKind, MapKind)
 }
 
 // JsonToString returns the textual JSON syntax representation
@@ -112,6 +112,7 @@ func (j *_Bool) String() string {
 
 type _Map struct { m map[string]Json; _Null }
 func (j *_Map) Kind() int { return MapKind }
+func (j *_Map) Len() int { return len(j.m) }
 func (j *_Map) Get(s string) Json {
 	if j.m == nil {
 		return Null
diff --git a/src/lib/json/generic_test.go b/src/lib/json/generic_test.go
index ab3e24fb80..68868d7a5a 100644
--- a/src/lib/json/generic_test.go
+++ b/src/lib/json/generic_test.go
@@ -64,6 +64,10 @@ func TestJsonMap(t *testing.T) {
 	if mapv == nil {
 		t.Fatalf("StringToJson(%#q) => nil, %v, %v", mapstr, ok, errtok);
 	}
+	if cnt := mapv.Len(); cnt != len(jsontests) {
+		t.Errorf("StringToJson(%#q).Len() => %v, want %v", mapstr, cnt,
+		         len(jsontests));
+	}
 	for k,v := range values {
 		if v1 := mapv.Get(k); !Equal(v1, v) {
 			t.Errorf("MapTest: Walk(%#q) => %v, want %v", k, v1, v);
-- 
2.30.9