packages feed

servant-csharp 0.0.6.1 → 0.0.7.0

raw patch · 3 files changed

+160/−6 lines, 3 filesdep +uuiddep +uuid-typesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: uuid, uuid-types

API changes (from Hackage documentation)

- CS: [convtemplate] :: GenerateCsConfig -> GenerateCsConfig -> IO String
- CS.JsonDotNet: [convtemplate] :: GenerateCsConfig -> GenerateCsConfig -> IO String
+ CS: [apiCsName] :: GenerateCsConfig -> String
+ CS: [assemblyinfotemplate] :: GenerateCsConfig -> GenerateCsConfig -> IO String
+ CS: [classCsName] :: GenerateCsConfig -> String
+ CS: [converterCsName] :: GenerateCsConfig -> String
+ CS: [convertertemplate] :: GenerateCsConfig -> GenerateCsConfig -> IO String
+ CS: [csprojtemplate] :: GenerateCsConfig -> GenerateCsConfig -> IO String
+ CS: [enumCsName] :: GenerateCsConfig -> String
+ CS: [guid] :: GenerateCsConfig -> Maybe String
+ CS: [outdir] :: GenerateCsConfig -> String
+ CS: assemblyInfoCsForAPI :: IO String
+ CS: assemblyInfoCsForAPIWith :: GenerateCsConfig -> IO String
+ CS: csprojForAPI :: IO String
+ CS: csprojForAPIWith :: GenerateCsConfig -> IO String
+ CS: genCsForAPI :: (HasForeign CSharp Text api, GenerateList Text (Foreign Text api)) => GenerateCsConfig -> Proxy api -> IO ()
+ CS.JsonDotNet: [apiCsName] :: GenerateCsConfig -> String
+ CS.JsonDotNet: [assemblyinfotemplate] :: GenerateCsConfig -> GenerateCsConfig -> IO String
+ CS.JsonDotNet: [classCsName] :: GenerateCsConfig -> String
+ CS.JsonDotNet: [converterCsName] :: GenerateCsConfig -> String
+ CS.JsonDotNet: [convertertemplate] :: GenerateCsConfig -> GenerateCsConfig -> IO String
+ CS.JsonDotNet: [csprojtemplate] :: GenerateCsConfig -> GenerateCsConfig -> IO String
+ CS.JsonDotNet: [enumCsName] :: GenerateCsConfig -> String
+ CS.JsonDotNet: [guid] :: GenerateCsConfig -> Maybe String
+ CS.JsonDotNet: [outdir] :: GenerateCsConfig -> String
+ CS.JsonDotNet: assemblyInfoCsForAPI :: IO String
+ CS.JsonDotNet: assemblyInfoCsForAPIWith :: GenerateCsConfig -> IO String
+ CS.JsonDotNet: csprojForAPI :: IO String
+ CS.JsonDotNet: csprojForAPIWith :: GenerateCsConfig -> IO String
+ CS.JsonDotNet: genCsForAPI :: (HasForeign CSharp Text api, GenerateList Text (Foreign Text api)) => GenerateCsConfig -> Proxy api -> IO ()
- CS: GenerateCsConfig :: String -> (GenerateCsConfig -> IO String) -> (forall api. (HasForeign CSharp Text api, GenerateList Text (Foreign Text api)) => GenerateCsConfig -> Proxy api -> IO String) -> (GenerateCsConfig -> IO String) -> (GenerateCsConfig -> IO String) -> [FilePath] -> GenerateCsConfig
+ CS: GenerateCsConfig :: String -> String -> String -> String -> String -> String -> (GenerateCsConfig -> IO String) -> (forall api. (HasForeign CSharp Text api, GenerateList Text (Foreign Text api)) => GenerateCsConfig -> Proxy api -> IO String) -> (GenerateCsConfig -> IO String) -> (GenerateCsConfig -> IO String) -> (GenerateCsConfig -> IO String) -> (GenerateCsConfig -> IO String) -> Maybe String -> [FilePath] -> GenerateCsConfig
- CS.JsonDotNet: GenerateCsConfig :: String -> (GenerateCsConfig -> IO String) -> (forall api. (HasForeign CSharp Text api, GenerateList Text (Foreign Text api)) => GenerateCsConfig -> Proxy api -> IO String) -> (GenerateCsConfig -> IO String) -> (GenerateCsConfig -> IO String) -> [FilePath] -> GenerateCsConfig
+ CS.JsonDotNet: GenerateCsConfig :: String -> String -> String -> String -> String -> String -> (GenerateCsConfig -> IO String) -> (forall api. (HasForeign CSharp Text api, GenerateList Text (Foreign Text api)) => GenerateCsConfig -> Proxy api -> IO String) -> (GenerateCsConfig -> IO String) -> (GenerateCsConfig -> IO String) -> (GenerateCsConfig -> IO String) -> (GenerateCsConfig -> IO String) -> Maybe String -> [FilePath] -> GenerateCsConfig

Files

servant-csharp.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                servant-csharp-version:             0.0.6.1+version:             0.0.7.0 synopsis:            Generate servant client library for C# description:         Generate servant client library for C# homepage:            https://github.com/cutsea110/servant-csharp.git@@ -39,5 +39,7 @@                      , servant-foreign >=0.7 && <0.8                      , text >=1.2 && <1.3                      , time >=1.5 && <1.6+                     , uuid >=1.3 && <1.4+                     , uuid-types >=1.0 && <1.1   hs-source-dirs:      src   default-language:    Haskell2010
src/CS.hs view
@@ -1,4 +1,6 @@-module CS ( classCsForAPI+module CS ( genCsForAPI++          , classCsForAPI           , classCsForAPIWith           , apiCsForAPI           , apiCsForAPIWith@@ -6,6 +8,10 @@           , enumCsForAPIWith           , converterCsForAPI           , converterCsForAPIWith+          , assemblyInfoCsForAPI+          , assemblyInfoCsForAPIWith+          , csprojForAPI+          , csprojForAPIWith            , GenerateCsConfig(..)           , def
src/CS/JsonDotNet.hs view
@@ -4,7 +4,9 @@ {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-}-module CS.JsonDotNet ( classCsForAPI+module CS.JsonDotNet ( genCsForAPI++                     , classCsForAPI                      , classCsForAPIWith                      , apiCsForAPI                      , apiCsForAPIWith@@ -12,6 +14,10 @@                      , enumCsForAPIWith                      , converterCsForAPI                      , converterCsForAPIWith+                     , assemblyInfoCsForAPI+                     , assemblyInfoCsForAPIWith+                     , csprojForAPI+                     , csprojForAPIWith                       , GenerateCsConfig(..)                      , def@@ -28,14 +34,24 @@ import Data.Monoid ((<>)) import Data.Proxy import Data.Text as T (Text, unpack, pack)+import Data.Time.Clock (UTCTime(..), getCurrentTime)+import Data.Time.Calendar (toGregorian)+import Data.UUID.Types (toString)+import Data.UUID.V4 as UUID (nextRandom) import Language.Haskell.Exts import Servant.Foreign+import System.Directory (createDirectoryIfMissing) import Text.Heredoc  import CS.Common (CSharp, getEndpoints)  data GenerateCsConfig     = GenerateCsConfig { namespace :: String+                       , outdir :: String+                       , classCsName :: String+                       , apiCsName :: String+                       , enumCsName :: String+                       , converterCsName :: String                        , classtemplate :: GenerateCsConfig -> IO String                        , apitemplate ::  forall api.                                          (HasForeign CSharp Text api,@@ -44,19 +60,44 @@                                      -> Proxy api                                      -> IO String                        , enumtemplate :: GenerateCsConfig -> IO String-                       , convtemplate :: GenerateCsConfig -> IO String+                       , convertertemplate :: GenerateCsConfig -> IO String+                       , assemblyinfotemplate :: GenerateCsConfig -> IO String+                       , csprojtemplate :: GenerateCsConfig -> IO String+                       , guid :: Maybe String                        , sources :: [FilePath]                        }  def :: GenerateCsConfig def = GenerateCsConfig { namespace = "ServantClientAPI"+                       , outdir = "gen"+                       , classCsName = "Classes.cs"+                       , apiCsName = "API.cs"+                       , enumCsName = "Enum.cs"+                       , converterCsName = "JsonConverter.cs"                        , classtemplate = defClassTemplate                        , apitemplate = defAPITemplate                        , enumtemplate = defEnumTemplate-                       , convtemplate = defConvTemplate+                       , convertertemplate = defConvTemplate+                       , assemblyinfotemplate = defAssemblyInfoTemplate+                       , csprojtemplate = defCsprojTemplate+                       , guid = Nothing                        , sources = []                        } +genCsForAPI :: (HasForeign CSharp Text api,+             GenerateList Text (Foreign Text api)) =>+            GenerateCsConfig -> Proxy api -> IO ()+genCsForAPI conf api = do+  guid' <- maybe (toString <$> UUID.nextRandom) return $ guid conf+  let conf' = conf { guid = Just guid' }+  createDirectoryIfMissing True [heredoc|${outdir conf'}/${namespace conf'}/Properties|]+  classCsForAPIWith conf' >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}${classCsName conf'}|]+  apiCsForAPIWith conf' api >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}${apiCsName conf'}|]+  enumCsForAPIWith conf' >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}${enumCsName conf'}|]+  converterCsForAPIWith conf' >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}${converterCsName conf'}|]+  assemblyInfoCsForAPIWith conf' >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}/Properties/AssemblyInfo.cs|]+  csprojForAPIWith conf' >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}/${namespace conf'}.cs|]+ -------------------------------------------------------------------------- isDatatypeDecl :: Decl -> Bool isDatatypeDecl (DataDecl _ DataType _ _ _ [qcon] _) = True@@ -313,7 +354,7 @@ converterCsForAPI = converterCsForAPIWith def  converterCsForAPIWith :: GenerateCsConfig -> IO String-converterCsForAPIWith conf = (convtemplate conf) conf+converterCsForAPIWith conf = (convertertemplate conf) conf  defClassTemplate :: GenerateCsConfig -> IO String defClassTemplate conf = do@@ -500,3 +541,108 @@     } } |]++--------------------------------------------------------------------------++assemblyInfoCsForAPI :: IO String+assemblyInfoCsForAPI = assemblyInfoCsForAPIWith def++assemblyInfoCsForAPIWith :: GenerateCsConfig -> IO String+assemblyInfoCsForAPIWith conf = (assemblyinfotemplate conf) conf++defAssemblyInfoTemplate :: GenerateCsConfig -> IO String+defAssemblyInfoTemplate conf = do+  (year, _, _) <- fmap (toGregorian . utctDay) getCurrentTime+  guid <- maybe (toString <$> UUID.nextRandom) return $ guid conf+  return [heredoc|+using System.Reflection;+using System.Runtime.CompilerServices;+using System.Runtime.InteropServices;++[assembly: AssemblyTitle("${namespace conf}")]+[assembly: AssemblyDescription("")]+[assembly: AssemblyConfiguration("")]+[assembly: AssemblyCompany("")]+[assembly: AssemblyProduct("${namespace conf}")]+[assembly: AssemblyCopyright("Copyright ©  ${show year}")]+[assembly: AssemblyTrademark("")]+[assembly: AssemblyCulture("")]++[assembly: ComVisible(false)]++[assembly: Guid("${guid}")]++// [assembly: AssemblyVersion("1.0.*")]+[assembly: AssemblyVersion("1.0.0.0")]+[assembly: AssemblyFileVersion("1.0.0.0")]+|]++--------------------------------------------------------------------------++csprojForAPI :: IO String+csprojForAPI = csprojForAPIWith def++csprojForAPIWith :: GenerateCsConfig -> IO String+csprojForAPIWith conf = (csprojtemplate conf) conf++defCsprojTemplate :: GenerateCsConfig -> IO String+defCsprojTemplate conf = do+  guid <- maybe ((map toUpper . toString) <$> UUID.nextRandom) return $ guid conf+  return [heredoc|<?xml version="1.0" encoding="utf-8"?>+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />+  <PropertyGroup>+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>+    <ProjectGuid>{${guid}}</ProjectGuid>+    <OutputType>Library</OutputType>+    <AppDesignerFolder>Properties</AppDesignerFolder>+    <RootNamespace>${namespace conf}</RootNamespace>+    <AssemblyName>${namespace conf}</AssemblyName>+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>+    <FileAlignment>512</FileAlignment>+  </PropertyGroup>+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">+    <DebugSymbols>true</DebugSymbols>+    <DebugType>full</DebugType>+    <Optimize>false</Optimize>+    <OutputPath>bin\Debug\</OutputPath>+    <DefineConstants>DEBUG;TRACE</DefineConstants>+    <ErrorReport>prompt</ErrorReport>+    <WarningLevel>4</WarningLevel>+  </PropertyGroup>+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">+    <DebugType>pdbonly</DebugType>+    <Optimize>true</Optimize>+    <OutputPath>bin\Release\</OutputPath>+    <DefineConstants>TRACE</DefineConstants>+    <ErrorReport>prompt</ErrorReport>+    <WarningLevel>4</WarningLevel>+  </PropertyGroup>+  <ItemGroup>+    <Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL" />+    <Reference Include="System" />+    <Reference Include="System.Core" />+    <Reference Include="System.Xml.Linq" />+    <Reference Include="System.Data.DataSetExtensions" />+    <Reference Include="Microsoft.CSharp" />+    <Reference Include="System.Data" />+    <Reference Include="System.Net.Http" />+    <Reference Include="System.Xml" />+  </ItemGroup>+  <ItemGroup>+    <Compile Include="${apiCsName conf}" />+    <Compile Include="${converterCsName conf}" />+    <Compile Include="${classCsName conf}" />+    <Compile Include="${enumCsName conf}" />+    <Compile Include="Properties\AssemblyInfo.cs" />+  </ItemGroup>+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. +       Other similar extension points exist, see Microsoft.Common.targets.+  <Target Name="BeforeBuild">+  </Target>+  <Target Name="AfterBuild">+  </Target>+  -->+</Project>|]