code: private function encodeASetValue(array $value, Field $field)
      {
          $type = $field->getType();
  
          /*
           * A MessageRefType is the only object/map value that can be
           * used in a set.  In this case of DynamoDb, we can store it as
           * a list of maps.
           */
          if ($type->getTypeName() === TypeName::MESSAGE_REF()) {
              $list = [];
              foreach ($value as $v) {
                  $list[] = $type->encode($v, $field, $this);
              }
              return ['L' => $list];
          }
  
          if ($type->isString()) {
              $dynamoType = self::TYPE_STRING_SET;
          } elseif ($type->isNumeric()) {
              $dynamoType = self::TYPE_NUMBER_SET;
          } elseif ($type->isBinary()) {
              $dynamoType = self::TYPE_BINARY_SET;
          } else {
              throw new EncodeValueFailed(
                  $value,
                  $field,
                  sprintf('%s::%s has no handling for this value.', get_called_class(), __FUNCTION__)
              );
          }
  
          $result = [];
          foreach ($value as $v) {
              if ($type->encodesToScalar()) {
                  $result[] = (string)$type->encode($v, $field, $this);
              } else {
                  $result[] = (string)$v;
              }
          }
  
          return [$dynamoType => $result];
      }
docs: @param array $value
  @param Field $field
  
  @return mixed
  
  @throws EncodeValueFailed