SwiftMoyaCodeGenerator icon indicating copy to clipboard operation
SwiftMoyaCodeGenerator copied to clipboard

Generate whole API package instead of one request

Open lkuczborski opened this issue 9 years ago • 2 comments

The idea is to use RequestGroup and name the whole exported API after it's name (currently static "API" name is used). Then generate the whole enum with the enclosed Requests.

So something like this:

Twitter (RequestGroup)

  • User (Request, first enum case)
  • Tweets (Request, second enum case)

lkuczborski avatar Jan 03 '16 20:01 lkuczborski

The technique you can use here is:

processRequest(request) {
  // generate your code or whatever you need here
}

processGroup(group) {
  // generate your code or whatever you need here

  // process children
  var requests = group.getChildRequests();
  var groups = group.getChildGroups();
  for (var i = 0; i < requests.length; i++) {
    processRequest(requests[i]);
  }
  for (var i = 0; i < groups.length; i++) {
    processGroup(groups[i]);
  }
}

process(context) {
  var requests = context.getRootRequests();
  var groups = context.getRootGroups();
  for (var i = 0; i < requests.length; i++) {
    processRequest(requests[i]);
  }
  for (var i = 0; i < groups.length; i++) {
    processGroup(groups[i]);
  }
}

hope it helps!

mittsh avatar Jan 07 '16 18:01 mittsh

Also @lkuczborski, we will be adding at some point later (in a few weeks/months) a way to add options to code generators, so we could have a checkbox "Generate code for the whole document"

mittsh avatar Jan 07 '16 18:01 mittsh