code: def _build_schema(self, s):
          
          w = self._whatis(s)
          if w == self.IS_LIST:
              w0 = self._whatis(s[0])
              js = {"type": "array",
                    "items": {"type": self._jstype(w0, s[0])}}
          elif w == self.IS_DICT:
              js = {"type": "object",
                    "properties": {key: self._build_schema(val) for key, val in s.items()}}
              req = [key for key, val in s.items() if not val.is_optional]
              if req:
                  js["required"] = req
          else:
              js = {"type": self._jstype(w, s)}
          for k, v in self._json_schema_keys.items():
              if k not in js:
                  js[k] = v
          return js
docs: Recursive schema builder, called by `json_schema`.