diff --git a/src/App.js b/src/App.js index 62d4026..e0474ad 100644 --- a/src/App.js +++ b/src/App.js @@ -11,6 +11,7 @@ import NpmCard from './components/NpmCard' import JsOrgCard from './components/JsOrgCard' import PypiCard from './components/PypiCard' import S3Card from './components/S3Card' +import CratesioCard from './components/CratesioCard' import './App.css' const GlobalStyle = createGlobalStyle` @@ -54,6 +55,7 @@ export default function App() { + diff --git a/src/components/CratesioCard.js b/src/components/CratesioCard.js new file mode 100644 index 0000000..6e2f808 --- /dev/null +++ b/src/components/CratesioCard.js @@ -0,0 +1,17 @@ +import React from 'react' +import { DiRust } from 'react-icons/di' +import { Card, CardTitle, DedicatedAvailability } from './Card' + +export default function CratesioCard({ name }) { + return ( + + crates.io (Rust) + } + /> + + ) +} diff --git a/src/services/cratesio.js b/src/services/cratesio.js new file mode 100644 index 0000000..c1296a9 --- /dev/null +++ b/src/services/cratesio.js @@ -0,0 +1,23 @@ +const fetch = require('isomorphic-unfetch') + +async function getAvailability(name) { + const response = await fetch( + `https://crates.io/api/v1/crates/${encodeURIComponent(name)}` + ) + return response.status !== 200 +} + +module.exports = async (req, res) => { + const name = req.query.name + + if (!name) { + return res.status(400).json({ error: 'no query given' }) + } + + try { + const availability = await getAvailability(name) + res.json({ availability }) + } catch (err) { + res.status(400).json({ error: err.message }) + } +}