code: def decode_string(self, string, cache, as_map_key):
          
          if is_cache_key(string):
              return self.parse_string(cache.decode(string, as_map_key),
                                       cache, as_map_key)
          if is_cacheable(string, as_map_key):
              cache.encode(string, as_map_key)
          return self.parse_string(string, cache, as_map_key)
docs: Decode a string - arguments follow the same convention as the
          top-level 'decode' function.