public function visitValues(Requests\Values $request) { switch ($request->getValuesType()) { case Requests\Values::AS_SELF: return $this->traversable; case Requests\Values::AS_ARRAY: return $this->traversable->asArray(); case Requests\Values::AS_ARRAY_COMPATIBLE_ITERATOR: return $this->traversable->getIterator(); case Requests\Values::AS_TRUE_ITERATOR: return $this->traversable->getTrueIterator(); case Requests\Values::AS_TRAVERSABLE: return $this->traversable->asTraversable(); case Requests\Values::AS_COLLECTION: return $this->traversable->asCollection(); } }