public void Apply( ApiDescription apiDescription, OperationSpec operationSpec, ModelSpecRegistrar modelSpecRegistrar, ModelSpecGenerator modelSpecGenerator) { var responseTypeAttr = apiDescription.ActionDescriptor.GetCustomAttributes <ResponseTypeAttribute>().FirstOrDefault(); if (responseTypeAttr == null) { return; } IEnumerable <ModelSpec> complexSpecs; var modelSpec = modelSpecGenerator.TypeToModelSpec(responseTypeAttr.Type, out complexSpecs); if (modelSpec.Type == "object") { operationSpec.Type = modelSpec.Id; } else { operationSpec.Type = modelSpec.Type; operationSpec.Format = modelSpec.Format; operationSpec.Items = modelSpec.Items; operationSpec.Enum = modelSpec.Enum; } modelSpecRegistrar.RegisterMany(complexSpecs); }
public T ContentAs <T>(int index) { EnsureNotDisposed(); var response = _bytes.Memory.Slice(HeaderOffsets.HeaderLength); var operationSpecs = new List <OperationSpec>(); for (;;) { var bodyLength = _converter.ToInt32(response.Span.Slice(2)); var payLoad = response.Slice(6, bodyLength); var command = new OperationSpec { Status = (ResponseStatus)_converter.ToUInt16(response.Span), ValueIsJson = payLoad.Span.IsJson(), Bytes = payLoad }; operationSpecs.Add(command); response = response.Slice(6 + bodyLength); if (response.Length <= 0) { break; } } var spec = operationSpecs[index]; return(_serializer.Deserialize <T>(spec.Bytes)); }
byte[] GetBytes(OperationSpec spec) { var bytes = Transcoder.Serializer.Serialize(spec.Value); if (spec.RemoveBrackets) { return(bytes.StripBrackets()); } return(bytes); }
public void Apply(ApiDescription apiDescription, OperationSpec operationSpec, ModelSpecMap modelSpecMap) { if (apiDescription.ActionDescriptor.GetFilters().OfType <AuthorizeAttribute>().Any()) { operationSpec.ResponseMessages.Add(new ResponseMessageSpec { Code = (int)HttpStatusCode.Unauthorized, Message = "Authentication required" }); } }
public void Apply(ApiDescription apiDescription, OperationSpec operationSpec, ModelSpecMap modelSpecMap) { operationSpec.ResponseMessages.Add(new ResponseMessageSpec { Code = (int)HttpStatusCode.OK, Message = "It's all good!" }); operationSpec.ResponseMessages.Add(new ResponseMessageSpec { Code = (int)HttpStatusCode.InternalServerError, Message = "Somethings up!" }); }
private void WriteSpecValue(OperationBuilder builder, OperationSpec spec) { if (!spec.RemoveBrackets) { // We can serialize directly Transcoder.Serializer.Serialize(builder, spec.Value); } else { using (var stream = MemoryStreamFactory.GetMemoryStream()) { Transcoder.Serializer.Serialize(stream, spec.Value); ReadOnlyMemory <byte> bytes = stream.GetBuffer().AsMemory(0, (int)stream.Length); bytes = bytes.StripBrackets(); builder.Write(bytes); } } }
public void Apply(ApiDescription apiDescription, OperationSpec operationSpec, ModelSpecMap modelSpecMap) { var descriptionXml = XElement.Parse(apiDescription.Documentation); var summary = descriptionXml.Element("summary"); operationSpec.Summary = summary != null ? summary.Value : descriptionXml.Value; var notes = descriptionXml.Element("remarks"); if (notes != null) { operationSpec.Notes = notes.Value; } foreach (var error in descriptionXml.Elements("response")) { operationSpec.ResponseMessages.Add(new ResponseMessageSpec() { Code = Convert.ToInt32(error.Attribute("code").Value), Message = error.Value }); } }
public T ContentAs <T>(int index) { var response = _bytes; var statusOffset = 24;//Header.BodyOffset; var valueLengthOffset = statusOffset + 2; var valueOffset = statusOffset + 6; var operationSpecs = new List <OperationSpec>(); for (;;) { var bodyLength = _converter.ToInt32(response, valueLengthOffset); var payLoad = new byte[bodyLength]; Buffer.BlockCopy(response, valueOffset, payLoad, 0, bodyLength); var command = new OperationSpec { Status = (ResponseStatus)_converter.ToUInt16(response, statusOffset), ValueIsJson = payLoad.IsJson(0, bodyLength - 1), Bytes = payLoad }; operationSpecs.Add(command); statusOffset = valueOffset + bodyLength; valueLengthOffset = statusOffset + 2; valueOffset = statusOffset + 6; if (valueOffset >= response.Length) { break; } } var spec = operationSpecs[index]; return(_serializer.Deserialize <T>(spec.Bytes, 0, spec.Bytes.Length)); }
private static void ParameterSpec(OperationSpec operation, string name, Action <ParameterSpec> applyAssertions) { var parameterSpec = operation.Parameters.Single(param => param.Name == name); applyAssertions(parameterSpec); }