My agentic slop goes here. Not intended for anyone else!
at main 1.6 kB view raw
1(* 2 * Copyright (c) 2014, OCaml.org project 3 * Copyright (c) 2015 KC Sivaramakrishnan <sk826@cl.cam.ac.uk> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 *) 17 18(** HTTP session management for fetching feeds. *) 19 20let src = Logs.Src.create "river" ~doc:"River RSS/Atom aggregator" 21module Log = (val Logs.src_log src : Logs.LOG) 22 23type t = { 24 session : (float Eio.Time.clock_ty Eio.Resource.t, 25 [`Generic | `Unix] Eio.Net.ty Eio.Resource.t) Requests.t; 26} 27 28let init ~sw env = 29 Log.info (fun m -> m "Initializing River session"); 30 let session = Requests.create ~sw 31 ~default_headers:(Requests.Headers.of_list [ 32 ("User-Agent", "OCaml-River/1.0"); 33 ]) 34 ~follow_redirects:true 35 ~max_redirects:5 36 ~verify_tls:true 37 env 38 in 39 { session } 40 41let with_session env f = 42 Log.info (fun m -> m "Creating River session"); 43 Eio.Switch.run @@ fun sw -> 44 let client = init ~sw env in 45 f client 46 47let get_requests_session t = t.session