+ <pre><span class="line"><span class="source scala"><span class="meta import scala"><span class="keyword other import scala">import</span> <span class="variable package scala">cats.effect.</span><span class="meta import selector scala">{<span class="variable import scala">ExitCode</span>, <span class="variable import scala">IO</span>, <span class="variable import scala">IOApp</span>}</span></span></span><br><span class="line"><span class="meta import scala"><span class="keyword other import scala">import</span> <span class="variable package scala">cats.effect.kernel.Resource</span></span></span></span><br><span class="line"><span class="meta import scala"><span class="keyword other import scala">import</span> <span class="variable package scala">org.typelevel.otel4s.trace.Tracer</span></span></span><br><span class="line"></span><br><span class="line"><span class="comment line double-slash scala"><span class="punctuation definition comment scala">//</span> logger</span></span><br><span class="line"><span class="storage type stable scala">val</span> <span class="entity name val scala">logger</span>: <span class="support class scala">SelfAwareStructuredLogger</span>[<span class="support class scala">IO</span>] <span class="keyword operator assignment scala">=</span> log4catsLogger<span class="punctuation accessor scala">.</span>getLoggerFromClass(<span class="variable language scala">this</span><span class="punctuation accessor scala">.</span>getClass)</span></span><br><span class="line"></span><br><span class="line"><span class="comment line double-slash scala"><span class="punctuation definition comment scala">//</span> Example code</span></span><br><span class="line"><span class="storage type function scala">def</span> <span class="entity name function scala">run</span>(<span class="variable parameter scala">args</span>: <span class="support class scala">List</span>[<span class="support class scala">String</span>])<span class="punctuation separator scala">:</span> <span class="support class scala">IO</span>[<span class="support class scala">ExitCode</span>] <span class="keyword operator assignment scala">=</span> <span class="meta block scala"><span class="punctuation section block begin scala">{</span></span><br><span class="line"> <span class="storage type stable scala">val</span> <span class="entity name val scala">runApp</span> <span class="keyword operator assignment scala">=</span> (<span class="variable parameter scala">maybeTracer</span>: <span class="support class scala">Option</span>[<span class="support class scala">Tracer</span>[<span class="support class scala">IO</span>]]) <span class="storage type function arrow scala">=></span></span><br><span class="line"> <span class="support constant scala">Modules</span><span class="punctuation accessor scala">.</span>transactorResource<span class="punctuation accessor scala">.</span>use <span class="meta block scala"><span class="punctuation section block begin scala">{</span> <span class="variable parameter scala">tx</span> <span class="storage type function arrow scala">=></span></span><br><span class="line"> <span class="storage type stable scala">val</span> <span class="entity name val scala">modules</span> <span class="keyword operator assignment scala">=</span> <span class="keyword other scala">new</span> <span class="support class scala">Modules</span>(tx)</span><br><span class="line"> <span class="storage type stable scala">val</span> <span class="entity name val scala">host</span> <span class="keyword operator assignment scala">=</span> <span class="support constant scala">Ipv4Address</span><span class="punctuation accessor scala">.</span>fromString(modules<span class="punctuation accessor scala">.</span>config<span class="punctuation accessor scala">.</span>http<span class="punctuation accessor scala">.</span>host)<span class="punctuation accessor scala">.</span>getOrElse(<span class="string quoted interpolated scala"><span class="support function scala">ipv4</span><span class="punctuation definition string begin scala">"</span>127.0.0.1<span class="punctuation definition string end scala">"</span></span>)</span><br><span class="line"> <span class="storage type stable scala">val</span> <span class="entity name val scala">port</span> <span class="keyword operator assignment scala">=</span> <span class="support constant scala">Port</span><span class="punctuation accessor scala">.</span>fromInt(modules<span class="punctuation accessor scala">.</span>config<span class="punctuation accessor scala">.</span>http<span class="punctuation accessor scala">.</span>port)<span class="punctuation accessor scala">.</span>getOrElse(<span class="string quoted interpolated scala"><span class="support function scala">port</span><span class="punctuation definition string begin scala">"</span>9001<span class="punctuation definition string end scala">"</span></span>)</span><br><span class="line"></span><br><span class="line"> <span class="keyword control flow scala">for</span> {</span><br><span class="line"> <span class="variable language underscore scala">_</span> <span class="keyword operator assignment scala"><-</span> logger<span class="punctuation accessor scala">.</span>info(<span class="support constant scala">ApplicationInfo</span><span class="punctuation accessor scala">.</span>asJson)</span><br><span class="line"> <span class="variable language underscore scala">_</span> <span class="keyword operator assignment scala"><-</span> <span class="support constant scala">IO</span>(modules<span class="punctuation accessor scala">.</span>flywayMigrator<span class="punctuation accessor scala">.</span>migrate())</span><br><span class="line"> <span class="variable parameter scala">routes</span> <span class="keyword operator assignment scala"><-</span> modules<span class="punctuation accessor scala">.</span>router<span class="punctuation accessor scala">.</span>withCors<span class="punctuation accessor scala">.</span>map[<span class="support class scala">Kleisli</span>[<span class="support class scala">IO</span>, <span class="support class scala">Request</span>[<span class="support class scala">IO</span>], <span class="support class scala">Response</span>[<span class="support class scala">IO</span>]]](<span class="variable language underscore scala">_</span><span class="punctuation accessor scala">.</span>orNotFound)</span><br><span class="line"> <span class="variable parameter scala">httpApp</span> <span class="keyword operator assignment scala"><-</span> <span class="support constant scala">IO</span>(<span class="keyword other scala">new</span> <span class="support class scala">HttpAppBuilder</span>(routes<span class="punctuation separator scala">,</span> maybeTracer)<span class="punctuation accessor scala">.</span>build)</span><br><span class="line"> <span class="variable language underscore scala">_</span> <span class="keyword operator assignment scala"><-</span> server(host<span class="punctuation separator scala">,</span> port<span class="punctuation separator scala">,</span> httpApp)<span class="punctuation accessor scala">.</span>use(<span class="variable language underscore scala">_</span> <span class="storage type function arrow scala">=></span> <span class="support constant scala">IO</span><span class="punctuation accessor scala">.</span>never)</span><br><span class="line"> } <span class="keyword control flow scala">yield</span> <span class="support constant scala">ExitCode</span><span class="punctuation accessor scala">.</span><span class="support constant scala">Success</span></span><br><span class="line"> <span class="punctuation section block end scala">}</span></span></span><br><span class="line"><span class="punctuation section block end scala">}</span></span></span></span><br></pre>
0 commit comments